下载log4cpp后,按照老三步进行安装,头文件安装到/usr/local/include/log4cpp
,库文件在/usr/local/lib
。如果在ARM平台,安装为1
2
3./configure --build=arm-linux
make
sudo make install
在CMakeList里写好调用后,编译,结果报错:1
2
3
4//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_key_create'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_getspecific'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_key_delete'
//usr/local/lib/liblog4cpp.so: undefined reference to `pthread_setspecific'
这是不识别pthread,需要再链接pthread,target_link_libraries(${PROJECT_NAME} -llog4cpp -pthread)
,这样就正常了
我的日志配置文件是这样的:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32# DEBUG是指定rootCategory的log级别门槛
# TESTAppender是输出到日志文件
# 如果有console,日志会在CGI,IDE输出和Linux终端中输出
log4cpp.rootCategory=DEBUG,TESTAppender
# -------定义console属性------- #
# consoleAppender类型:控制台输出
# 控制台输出的log输出的格式是:[%p] %d{%H:%M:%S.%l} (%c): %m%n
log4cpp.appender.console=ConsoleAppender
log4cpp.appender.console.layout=PatternLayout
log4cpp.appender.console.layout.ConversionPattern=[%p] %d{%H:%M:%S.%l} (%c): %m%n
# -------定义TESTAppender的属性-------
# RollingFileAppender类型:输出到回卷文件,即文件到达某个大小的时候产生一个新的文件
log4cpp.appender.TESTAppender=RollingFileAppender
#当日志文件到达maxFileSize大小时,将会自动滚动,这里是100K
log4cpp.appender.TESTAppender.maxFileSize=100000000
#maxBackupIndex指定可以产生的滚动文件的最大数
log4cpp.appender.TESTAppender.maxBackupIndex=10
# 日志信息输出到的文件路径
log4cpp.appender.TESTAppender.fileName=/home/user/log/package.log
# PatternLayout 表示可以灵活指定布局模式
log4cpp.appender.TESTAppender.layout=PatternLayout
#append=true 信息追加到上面指定的日志文件中,false表示将信息覆盖指定文件内容
log4cpp.appender.TESTAppender.append=true
log4cpp.appender.TESTAppender.layout.ConversionPattern=[%d{%Y-%m-%d %H:%M:%S.%l}-%p]: %m%n
log4cpp
的模式设置,我常用的是 [%d{%m-%d %H:%M:%S.%l}-%p]: %m%n
,日志的形式: [03-08 13:48:07.876-INFO]: this is log
默认是%m%n
- %%%%: a single percent sign
- %c: the category
- %d: the date
- %p: 优先级
- %r: milliseconds since this layout was created.
- %R: seconds since Jan 1, 1970
- %l: 毫秒
- %m the message
- %n: the platform specific line separator
1 |
|
如果配置文件路径不存在,会报错: Configure Problem: File /home/user/Document/test.conf does not exist
但是程序还可以继续向下运行,也就是不会受日志的问题而影响,这正是我们需要的。
如果将log
作为成员变量,这样写1
2
3
4log4cpp::Category& log; // 成员变量
MyClass::MyClass()
:log(log4cpp::Category::getRoot() )
不指定配置文件仍能通过编译,但是不要这样做。 Log4cpp不存在获得配置文件或日志目录的接口
运行结果生成了日志文件,内容和终端输出都是:1
2[06-26 06:14:21.658 - INFO]: Hello log, abc
[06-26 06:14:21.659 - INFO]: [/home/user/QtProjects/TestLog4cpp/main.cpp -> main -> 22] Test option
log4cpp::Category::shutdown();
会关闭所有的appenders,这一句只能在程序的最后使用,我曾经在某个类的析构函数里调用了它,但这个类在一个函数里使用,所以这个类对象是局部变量,函数结束后就执行了shutdown()
,但主函数尚未结束,导致主函数后面的日志都不能显示了
另外还有一个 spdlog