日志作为软件中一个非常重要的模块,开发者总是希望记录的信息越全越好,记录日志使用的性能越少越好。所以出现了很多优秀的日志库,比如spdlog、log4cpp、log4cplus等。
之前已经介绍过spdlog,见文章开源库推荐——spdlog
今天要给大家介绍的是另一个高性能的日志库——Quill。
Quill的性能真如描述的那样好吗?请看如下数据:
Quill是一个高性能的C++日志库,它提供了强大的日志记录功能和灵活的配置选项。其主要特性如下:
Logger.h
和LogMacros.h
两个头文件,用于日志记录。这种最小化头文件依赖的设计,使得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:
vcpkg install quill
以下是一个简单的使用示例,展示如何创建日志记录器并记录日志:
#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绝对值得你尝试。