1. 简介
Logging用于将日志事件信息(时间 日志级别 文件名 行号等)加到输出缓冲区,默认输出到stdout。
2. 类与接口
① 私有内部类Impl
将日志事件(时间 日志级别 文件名 行号等)信息加到输出缓冲区具体实现
② 公共内部类SourceFile
计算源文件basename
③ 一些重要成员函数
4种构造函数,根据参数将额外信息加到输出缓冲区
析构函数把LogStream缓冲区中的内容取出来,由g_output控制输出到特定文件,默认为stdout
typedef void (OutputFunc)(const char msg, int len);
输出的控制函数,默认输出到stdout
typedef void (*FlushFunc)();
刷新的回调函数,默认刷新标准输出
④ 日志宏定义
如果level<=当前级别,用一个匿名Logger对象,调用stream(),返回一个LogStream类型的引用,这个类重载了<<运算符,然后把信息输入到缓冲区
⑤ 普通全局变量
g_output 日志输出
g_flush 日志刷新
g_logTimeZone 时区信息
⑥ 线程局部变量
t_errnobuf 存储errno描述信息
t_time 存储格式化后的时间信息
t_lastSecond 记录上一次记录的时间,在Impl的formatTime()中使用,如果时间不同才更新
3. 一般流程
前端线程使用LOG_XX宏定义记录日志信息,宏会调用Logger构造函数生成匿名Logger对象并返回该对象的impl_.stream_,stream_为LogStream的引用,此时LOG_XX << ...
会调用LogStream重载的<<将日志信息存入LogStream内部Buffer,Logger对象析构时会取出内部impl_.stream_的Buffer,并由g_output控制输出到特定文件,默认为stdout。
4. 参考
https://www.icode9.com/content-4-399239.html
Github