Quill日志库v10.0.0版本发布:全面升级日志功能与性能优化
quill Asynchronous Low Latency C++ Logging Library 项目地址: https://gitcode.com/gh_mirrors/quill4/quill
Quill是一个高性能的C++异步日志库,以其出色的性能和灵活的配置著称。最新发布的v10.0.0版本带来了多项重要更新,包括全新的宏自由日志模式、二进制数据高效日志支持、立即刷新功能增强等,为开发者提供了更强大、更灵活的日志记录能力。
宏自由日志模式:更灵活的日志记录方式
Quill v10.0.0引入了一种全新的日志记录方式——宏自由模式。开发者现在可以选择两种不同的日志记录风格:传统的宏模式(通过包含"quill/LogMacros.h")或新的宏自由模式(通过包含"quill/LogFunctions.h")。
宏自由模式提供了更接近普通函数调用的日志接口,例如:
quill::debug(logger, "A {} message with number {}", "test", 123);
虽然宏模式仍然是推荐的主要日志记录方式(因其性能更优),但宏自由模式为那些不喜欢使用宏或需要更灵活日志接口的开发者提供了替代方案。需要注意的是,宏自由模式相比宏模式会有更高的性能开销。
二进制数据高效日志支持
新版本特别针对二进制数据日志场景进行了优化,新增了BinaryDataDeferredFormatCodec
编解码器。这一功能专为高效记录变长二进制数据而设计,其核心思想是在热路径上仅复制原始字节,而将格式化操作推迟到后台线程执行。
这对于需要记录二进制协议消息(如SBE或自定义二进制格式)、网络数据包或原始二进制数据的场景特别有价值。开发者可以高效地记录这些数据而不会影响应用程序的性能表现。
立即刷新功能增强
立即刷新功能在v10.0.0中得到了显著增强,现在支持基于间隔的运行时配置。这一功能在调试时特别有用,它能确保日志语句被刷新到接收器,同时会阻塞调用线程。开发者现在可以通过logger->set_immediate_flush(flush_every_n_messages)
方法为每个记录器实例设置刷新间隔。
编译时优化选项
新版本增加了多个编译时优化选项,帮助开发者根据具体需求优化日志系统:
-
QUILL_DISABLE_FILE_INFO
:当不需要在日志中包含文件信息时,可以禁用__FILE__
和__LINE__
信息的记录,减少二进制文件中嵌入的源代码路径信息,从安全角度考虑这是一个有价值的优化。 -
QUILL_DETAILED_FUNCTION_NAME
:启用此选项后,日志系统会使用编译器特定的详细函数签名(如GCC/Clang的__PRETTY_FUNCTION__
或MSVC的__FUNCSIG__
)替代标准的__FUNCTION__
,提供更完整的函数信息,包括返回类型、命名空间和参数类型。
日志格式定制增强
v10.0.0在日志格式定制方面也做了多项改进:
-
source_location_path_strip_prefix
选项允许自定义%(source_location)
属性的显示方式。设置前缀后,包含该前缀的路径将去除前缀及其之前的所有内容,使日志输出更加简洁。 -
source_location_remove_relative_paths
选项可以移除%(source_location)
属性中的相对路径组件,简化日志中的文件路径显示。 -
process_function_name
自定义点允许在日志显示前对函数签名进行自定义处理,特别适合与QUILL_DETAILED_FUNCTION_NAME
选项配合使用,提高函数签名的可读性。
用户定义类型日志支持
新版本通过QUILL_LOGGABLE_DIRECT_FORMAT
和QUILL_LOGGABLE_DEFERRED_FORMAT
两个宏简化了用户定义类型的日志记录。这些宏要求类型已经实现了operator<<
操作符,它们为现有功能提供了更便捷的使用方式。
性能优化与内部重构
在内部实现上,v10.0.0对运行时元数据处理进行了重构,提供了三种不同级别的宏来处理运行时元数据,为不同场景提供了更灵活的选项:
-
QUILL_LOG_RUNTIME_METADATA_DEEP
:对fmt
、file
、function
和tags
进行深拷贝,适用于从其他日志库转发日志的场景。 -
QUILL_LOG_RUNTIME_METADATA_HYBRID
:对fmt
和tags
进行深拷贝,file
和function
作为引用,用于新的宏自由模式。 -
QUILL_LOG_RUNTIME_METADATA_SHALLOW
:所有内容都作为引用处理,用于使用编译时元数据和动态日志级别的情况。
此外,当使用带有覆盖PatternFormatterOptions
的接收器时,add_metadata_to_multi_line_logs
选项现在会正确应用在接收器级别,避免了之前仅在记录器级别有效的问题。
总结
Quill v10.0.0通过引入宏自由日志模式、二进制数据高效日志支持、增强的立即刷新功能以及多项编译时优化选项,为C++开发者提供了更强大、更灵活的日志记录解决方案。这些改进不仅增强了功能,也优化了性能,使Quill在需要高性能日志记录的场景中继续保持领先地位。无论是需要记录复杂二进制数据,还是希望获得更灵活的日志接口,v10.0.0版本都能满足开发者的需求。
quill Asynchronous Low Latency C++ Logging Library 项目地址: https://gitcode.com/gh_mirrors/quill4/quill
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考