当前位置: 首页 > news >正文

【优秀三方库研读】在 quill 开源库 LogMarcos.h 中知识点汇总及讲解

以下是LogMarcos.h中的主要知识点汇总及详细讲解:


大纲目录

  1. 编译时日志级别过滤
  2. 预处理宏与条件编译
  3. 可变参数处理技巧
  4. 格式化字符串生成
  5. 日志宏的分发机制
  6. 线程本地存储(TLS)
  7. 零成本抽象设计
  8. 动态日志级别支持
  9. 结构化日志标签
  10. 日志频率限制机制

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(
http://www.xdnf.cn/news/561727.html

相关文章:

  • CVE-2018-1270源码分析与漏洞复现(spring-messaging 表达式注入)
  • Flask 路由装饰器:从 URL 到视图函数的优雅映射
  • 使用Terraform创建azure databrick
  • 每日算法 -【Swift 算法】寻找字符串中最长回文子串(三种经典解法全解析)
  • 【工具教程】图片识别内容改名,图片指定区域识别重命名,批量识别单据扫描件批量改名,基于WPF和腾讯OCR的实现方案
  • HTML5 Video (视频) 深入解析
  • WPF···
  • [Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)
  • Taro Error: chunk common [mini-css-extract-plugin]
  • 单片机设计_四轴飞行器(STM32)
  • apache http client连接池实现原理
  • 网络学习-利用reactor实现http请求(六)
  • K个一组链表翻转
  • 【大前端】使用NodeJs HTTP模块创建web服务器、SSE通讯
  • 运维web服务器
  • Java—— IO流 第二期
  • 怎么把cursor(Cursor/ollama)安装到指定路径
  • 从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级
  • 软考 测试 静态测试 动态测试
  • 2025ICPC南昌邀请赛流水账
  • 有理函数积分的一般方法
  • Data Vault 2.0:企业数据建模的现代方法
  • IDEA推送到gitlab,jenkins识别,然后自动发布到需要的主机
  • 【Django】Django DRF 中如何手动调用分页器返回分页数据(APIView,action场景)
  • eclipse 生成函数说明注释
  • 手术机器人行业新趋势:Kinova多机械臂协同系统如何突破复杂场景适应性瓶颈?
  • Idea 查找引用jar包依赖来源的Maven pom坐标
  • 实践大模型提示工程(Prompt Engineering)
  • 01. C#入门系列【你的第一个程序】从Hello World开始
  • 智能驾驶中的深度学习:基于卷积神经网络的车道线检测