【优秀三方库研读】在 quill 开源库 LogMarcos.h 中知识点汇总及讲解
以下是LogMarcos.h中的主要知识点汇总及详细讲解:
大纲目录
- 编译时日志级别过滤
- 预处理宏与条件编译
- 可变参数处理技巧
- 格式化字符串生成
- 日志宏的分发机制
- 线程本地存储(TLS)
- 零成本抽象设计
- 动态日志级别支持
- 结构化日志标签
- 日志频率限制机制
1. 编译时日志级别过滤
核心宏:QUILL_COMPILE_ACTIVE_LOG_LEVEL
- 通过定义不同日志级别对应的数值(如
QUILL_COMPILE_ACTIVE_LOG_LEVEL_TRACE_L3=0
),允许在编译时完全剔除低于指定级别的日志代码。 - 零成本:通过
#if
条件编译,将不需要的日志语句替换为(void)0
,消除分支和对象创建。 - 使用示例:
// 编译时仅保留WARNING及以上级别 add_compile_definitions(-DQUILL_COMPILE_ACTIVE_LOG_LEVEL=6)
2. 预处理宏与条件编译
关键技巧:
- 默认值处理:
#if !defined(QUILL_COMPILE_ACTIVE_LOG_LEVEL)#define QUILL_COMPILE_ACTIVE_LOG_LEVEL -1 // 默认启用所有级别 #endif
- 函数名获取:
#define QUILL_FUNCTION_NAME __FUNCTION__ // 使用编译器内置宏
- 空语句替换:
#define QUILL_LOG_TRACE_L3(