一个 C++ 流式风格日志输出工具
目前有五个级别,LTRACE、LDEBUG、LINFO、LWARN、LERROR
构造 Logs 类,默认输出到 cout,可以 ostream 参数或者字符串打开文件追加写入,也可以是另一个 Logs 对象
打开文件的方式会在析构时关闭文件
用 Logs 对象构造时,此时这个 Logs 的日志级别与输出主题均无效了,因为是通过另一个 Logs 对象输出
也就是说,某些时候,一个项目下面有若干模块,需要共享一个日志输出,需要线程安全以及同步一些设定,同时有不同的前缀以便区分,这种构造方式就能解决这种问题,所以为了方便,以 Logs 对象构造时可以顺便指定 perfix
之后也可以使用 open 方法重新指定流/文件/Logs对象
使用流与logs对象作为输出时注意作用域/生命周期
setTheme 方法可以设定输出格式,内置模板函数 def_theme 包含 FLAG:VT100/DATE/TIME/MICRO_SEC/GMT_TIME ,分别表示支持输出VT100色彩、日期、时间、毫秒和使用GMT时间。该函数在 '\n' 后添加填充以保证多行输出时的对齐。
setLevel 方法设定日志级别
setPrefix 方法设定日志输出前缀,用 Logs 对象构造时日志前缀没有影响,可以叠在之前的前缀的后面。
最后就是可以输出日志,重载了 [] 运算符,在方括号内填入日志级别,会构造一个缓存,此时使用流运算符写日志。选择重载 [] 是因为我不想让这个过程看上去像一个函数调用,虽然他是函数调用
一行结束之后,c++ 调用析构此时将缓存内容输出。加了锁,所以应该是支持多线程输出不会乱,没测过。
其他也没啥特性了,就很朴素
具体看看例子吧
def_theme 获取时间的方式(localtime,gmtime)线程不安全,但 C++ 获取日历的方式在C++20内,姑且先忽略这个不安全