可插拔日志系统
Pluggable Logging System
通过 Factory 模式实现可插拔日志后端,支持控制台和文件输出、日志轮转和级别过滤
子问题
1.日志后端切换
2.文件轮转策略
3.跨语言日志配置
4.glog 封装与级别映射差异处理
5.多线程环境下日志输出的线程安全保证
各项目的解法1 solutions
Signals
横向对比
| 维度 | zvec |
|---|---|
| 后端注册 | Factory 模板 + 编译期宏注册,运行时按字符串名称创建 |
| 分发机制 | LoggerBroker 全静态方法,删除构造函数,零实例化 |
| 级别控制 | 宏内 IsLevelEnabled 短路,热路径避免 va_list 构造 |
| 文件轮转 | glog 封装,FLAGS_max_log_size 大小轮转 + EnableLogCleaner 过期清理 |
| 跨语言支持 | Python IntEnum 与 C++ const int 值对齐,init() 枚举校验后传字符串 |
| 安全关闭 | atexit 注册 ExitLogHandler → Unregister → glog ShutdownGoogleLogging |
最佳实践
1.LoggerBroker 单例管理全局日志,atexit 保证清理
2.宏内先检查 IsLevelEnabled 再构造 va_list,热路径零开销
3.Factory 编译期注册新后端只需一行宏,符合开闭原则
4.默认 ConsoleLogger + WARN 级别,零配置即可用