前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高频交易中常用的日志库——Quill

高频交易中常用的日志库——Quill

作者头像
程序员的园
发布2025-03-10 12:27:38
发布2025-03-10 12:27:38
24000
代码可运行
举报
运行总次数:0
代码可运行

日志作为软件中一个非常重要的模块,开发者总是希望记录的信息越全越好,记录日志使用的性能越少越好。所以出现了很多优秀的日志库,比如spdlog、log4cpp、log4cplus等。

之前已经介绍过spdlog,见文章开源库推荐——spdlog

今天要给大家介绍的是另一个高性能的日志库——Quill。

Quill的性能真如描述的那样好吗?请看如下数据:

Quill

Quill是一个高性能的C++日志库,它提供了强大的日志记录功能和灵活的配置选项。其主要特性如下:

  • 高性能:Quill采用了异步日志处理机制,将日志的格式化和写入操作交给后台线程来完成,这样就不会阻塞主线程的执行。这种设计使得程序的响应速度不受日志记录的影响,保证了应用程序的高性能。特别是在高并发和实时性要求较高的场景下,Quill的优势尤为明显。
  • 异步处理:Quill的异步处理机制是其核心特性之一。它通过后台线程来处理日志的格式化和I/O操作,确保主线程始终保持响应式,不会因为日志记录而产生延迟。这种设计不仅提高了性能,还使得日志记录变得更加灵活和高效。
  • 最小头文件包含:Quill的设计非常注重轻量化,前端仅需要包含Logger.hLogMacros.h两个头文件,用于日志记录。这种最小化头文件依赖的设计,使得Quill非常易于集成到现有项目中,减少了不必要的复杂性和依赖项。
  • 灵活的日志级别:Quill支持多种日志级别,包括DEBUG、INFO、WARNING、ERROR和FATAL。开发者可以根据需要选择合适的日志级别,以便在开发和生产环境中进行不同的日志记录。这种灵活的日志级别设置,使得日志管理更加方便和高效。
  • 丰富的日志格式:Quill提供了丰富的日志格式选项,包括时间戳、线程ID、日志级别、文件名、行号等。开发者可以根据需要自定义日志格式,以满足不同的日志记录需求。这种灵活的日志格式设置,使得日志输出更加清晰和易于分析。其支持的字段见后文
  • 编译时优化:Quill支持在编译时消除特定的日志级别,这意味着开发者可以根据不同的场景裁剪日志级别,从而减少不必要的开销。这种编译时优化不仅提高了性能,还使得日志记录更加灵活和高效。
  • 时间戳排序:在多线程应用程序中,日志的顺序对于调试至关重要。Quill能够确保日志按时间顺序排列,简化了多线程环境下的调试过程。这种时间戳排序的特性,使得开发者可以更方便地追踪事件的顺序和流程。
  • 日志过滤:Quill支持日志过滤功能,开发者可以根据需要只处理相关的日志消息。这种过滤机制不仅提高了日志记录的效率,还减少了不必要的日志信息,使得日志更加聚焦和有用。

Quill支持输出的字段有:

格式化选项

中文解释

%(time)

表示日志语句创建时的人类可读时间戳。

%(file_name)

发出日志调用的源文件的文件名。

%(full_path)

发出日志调用的源文件的完整路径。

%(caller_function)

包含日志调用的函数的名称。

%(log_level)

日志消息的日志级别的文本表示。

%(log_level_short_code)

缩写的日志级别名称。

%(line_number)

发出日志调用的源文件中的行号。

%(logger)

用于记录日志调用的日志记录器的名称。

%(message)

日志消息本身。

%(thread_id)

发出日志调用的线程的ID。

%(thread_name)

线程的名称。必须在该线程上的第一个日志语句之前设置。

%(process_id)

发出日志调用的进程的ID。

%(source_location)

作为单个字符串的完整源文件路径和行号。

%(short_source_location)

作为单个字符串的缩短后的源文件名和行号。

%(tags)

当使用_TAGS宏时附加到消息上的其他自定义标签。

%(named_args)

附加到消息上的键值对。仅在消息具有命名参数时适用;否则为空。

使用

安装

Quill具有最小头包含的特性,所以只需要包含头文件即可使用。可以直接通过github下载源码,也可以通过vcpkg进行安装。

github下载源码 可以从网址:https://github.com/odygrd/quill.git 下载源码,然后将其添加到你的项目中。

vcpkg安装 如果你的项目使用vcpkg进行依赖管理,可以通过以下命令安装Quill:

代码语言:javascript
代码运行次数:0
运行
复制
vcpkg install quill

基本示例

以下是一个简单的使用示例,展示如何创建日志记录器并记录日志:

代码语言:javascript
代码运行次数:0
运行
复制
#include "quill/Backend.h"
#include "quill/Frontend.h"
#include "quill/LogMacros.h"
#include "quill/sinks/ConsoleSink.h"
#include "quill/sinks/FileSink.h"

int main()
{
    quill::Backend::start();

    auto console_sink = quill::Frontend::create_or_get_sink<quill::ConsoleSink>("console_sink");
    auto file_sink = quill::Frontend::create_or_get_sink<quill::FileSink>("d://file_sink.log");

    quill::Logger* uniform_logger = quill::Frontend::create_or_get_logger(
        "uniform_logger",
        {console_sink, file_sink},
        quill::PatternFormatterOptions{
            "%(time)[%(process_id)/%(thread_id)] [%(log_level)] %(message)",
            "%Y_%M_%d %H:%M:%S:%Qms",
            quill::Timezone::GmtTime
        });
    uniform_logger->set_log_level(quill::LogLevel::Debug);    
    LOG_DEBUG(uniform_logger, "This is a debug message that only goes to file");
    LOG_INFO(uniform_logger, "This is an info message that goes to console {}", 123);
    LOG_INFO(uniform_logger, "This is an info message that goes to file {}", 456);

    quill::Backend::stop();
    return0;
}

总结

Quill是一个功能强大、性能卓越的C++日志库。它通过异步处理和灵活的配置选项,为开发者提供了高效、可靠的日志记录功能。无论是在小型应用还是大型系统中,Quill都能发挥其独特的优势,帮助你更好地管理和分析程序运行过程中的各种信息。如果你正在寻找一个高性能的日志解决方案,Quill绝对值得你尝试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Quill
  • 使用
    • 安装
    • 基本示例
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档