从chromium中抽取一个log日志库

前段时间准备写一个项目,想找一个顺手的log库。深受chromium中base库的log影响,觉得log4cXX这类的log库都用的不舒服。而google glog在windows平台上也做得不够出色。boost log研究了一段时间,太繁重了,也不实用。

我主要实在windows上写代码,于是萌生出把chromium中的log库给抽取出来的想法。刚刚把这个任务完成,抽取出来的log库只有11个文件,使用的时候只需要包含logging.h这个头文件就行了。我把代码放到github上了:chromium_winlog

抽取出来的log库跟chromium log用法是一样的,但是没有实现vlog和ETW(Event Tracing for Windows)功能。我觉得目前还没有必要加上。

logging.h头文件的注释写了这个log用法,我之前的博客chromium中的log类也总结这个log库的用法。
目前这个log库支持的特性:

  • 支持输出log到文件,系统调试器
  • 支持输出不同等级log
  • 支持错误回调函数
  • 支持惰性输出,支持条件输出,支持仅在debug模式生效
  • 支持同时输出当前的GetLastError信息
  • 支持发生错误时的栈回溯
  • 支持线程安全

也许有人没有耐心看,下面写个3分钟教程。

初始化

使用log库之前需要调用logging::InitLogging函数初始化一次。

调用logging::SetLogItems设置输出每条log包含的的信息,比如进程id,线程id,时间戳,精确时间。

log等级

log分4个等级。INFO,WARNING,ERROR,FATAL。
FATAL等级的log会触发一个断点。

输出log

输出log都是通过一些宏来输出,类似std::cout的用法。

_IF后缀的是条件输出log

D前缀的是只在debug模式下生效

P前缀的是输出log之后会附加上GetLastError信息

 

《从chromium中抽取一个log日志库》有3个想法

  1. chromium 中的 log 模块和 glog 模块神似,LOG宏和Severity级别的命名是一样的。
    从 chromium 抽取 log 要去掉一些依赖的头文件,麻烦。不如直接用 glog,一个完整的模块,也不大,轻量,方便。

发表评论

电子邮件地址不会被公开。 必填项已用*标注