C++的日志库 log4cxx
log4cxx有三个主要组件:loggers(记录器),appenders(输出源)和layout(布局)。可以简单理解为日志类别,要输出的地方,输出形式。
Logger是log4cxx的核心类,只执行日志操作;looger有层次结构,最顶层为RootLogger;logger是有级别的。每个logger可以附加多个Appender。Appender代表了日志输出的目标,如输出到文件、控制台等等。对于每一种appender,都可以通过layout进行格式设置。
logcxx 在 C++ 多线程下的使用
https://wenku.baidu.com/view/416f021aa8114431b90dd861.html
可以参考的设计模式如下:用动态库封装日志方法,不同线程实例化一个动态库对象,多线程共用一个日志对象,每个线程写一个日志文件。
一个日志库大体可以分为前端和后端两部分,前端是供应用程序使用的接口(API),并生成日志消息(log message);后端负责把日志消息写到目的地。两部分的接口可能简单到只有一个回调函数:
void output(const char*message, int len);其中的 message 字符串是一条完整的日志消息,包含日志级别、时间戳。源文件位置、线程 ID 等基本字段,以及程序输出的具体消息内容。
多线程程序中,前端和后端都与单线程程序没有区别,无非是每个线程有自己的前端,整个程序共用一个后端。难点在于将日志数据从多个前端高效地传输到后端。这是一个