log4cplus源码下载:
https://sourceforge.net/projects/log4cplus/files/log4cplus-stable/
https://github.com/log4cplus/log4cplus
log4cplus官方示例:
https://sourceforge.net/p/log4cplus/wiki/CodeExamples/
一、编译库
解压出来后,log4cplus-1.2.2目录里面有个msvc10目录,是VS的编译平台,可以用vs2013打开,里面有很多项目。实际只要编译log4cplus或log4cplusS就行。一个是动态链接库,一个是静态链接库。根据默认的属性编译,顺利编译成功。
本人选择Unicode编码格式,分别编译出32位和64位的动态库和静态库。库的路径如下:
\Win32\bin.Debug_Unicode
\Win32\bin.Release_Unicode
\x64\bin.Debug_Unicode
\x64\bin.Release_Unicode
二、VS2013配置
工程-属性-C/C++/常规/附加包含目录:
..\log4cplus-1.2.2\include
工程-属性-链接器/常规/附加库目录:
32位:
..\log4cplus-1.2.2\lib\Win32\bin.Debug_Unicode
..\log4cplus-1.2.2\lib\Win32\bin.Release_Unicode
64位:
..\log4cplus-1.2.2\lib\x64\bin.Debug_Unicode
..\log4cplus-1.2.2\lib\x64\bin.Release_Unicode
工程-属性-链接器/输入/附加依赖项,本人使用动态库,不用静态库:
log4cplusUD.lib
log4cplusU.lib
三、配置文件logconfig.properties
#TRACE~FATAL各种级别的日志都输出到同一个目录中,可以通过调整log4cplus.rootLogger=DEBUG,APPNDER_FILE中的DEBUG为其它级别,进行日志过滤。 log4cplus.rootLogger=DEBUG,APPNDER_FILE #设置日志追加到文件尾 log4cplus.appender.APPNDER_FILE=log4cplus::RollingFileAppender #设置日志文件大小 log4cplus.appender.APPNDER_FILE.MaxFileSize=100MB #设置生成日志最大个数 log4cplus.appender.APPNDER_FILE.MaxBackupIndex=2 #设置输出日志路径 log4cplus.appender.APPNDER_FILE.File=log\test.log log4cplus.appender.APPNDER_FILE.layout=log4cplus::PatternLayout #设置日志打印格式 log4cplus.appender.APPNDER_FILE.layout.ConversionPattern=|%D:%d{%Q}|%p|%t|%l|%m|%n #设置日志级别范围 log4cplus.appender.APPNDER_FILE.filters.1=log4cplus::spi::LogLevelRangeFilter log4cplus.appender.APPNDER_FILE.filters.1.LogLevelMin=TRACE log4cplus.appender.APPNDER_FILE.filters.1.LogLevelMax=FATAL log4cplus.appender.APPNDER_FILE.filters.1.AcceptOnMatch=true log4cplus.appender.APPNDER_FILE.filters.2=log4cplus::spi::DenyAllFilter
四、初始化与退出
log4cplus::Initializer创建了一个Initializer实例,这么做会对log4cplus内部进行初始化。如果不使用Initializer实例对logcplus进行初始化,程序不能正常工作至结束。这个类可以被实例化多次。Initializer类维护着一个引用计数器。当引用计数器为0,且最后的Initializer实例被销毁时,log4cplus的内部构件将会被停止工作。log4cplus被关停后,将无法再重新初始化。不管怎样,main函数退出后,我们无法继续使用log4cplus。
如何在C++类里面初始化log4cplus?log4cplus V1和V2版本有不同:
1、log4cplus V1.x
构造函数调用log4cplus::initialize(),析构函数调用log4cplus::Logger::shutdown();
CMyLoggerV1::CMyLoggerV1() { log4cplus::initialize(); } CMyLoggerV1::~CMyLoggerV1() { log4cplus::Logger::shutdown(); }
2、log4cplus V2.x
定义成员变量即可。
class CMyLoggerV2 { private: log4cplus::Initializer m_initializer; }
五、VS2013+log4cplus 1.2.2完整的测试工程和库,请下载:
https://download.csdn.net/download/libaineu2004/11052189
VS2017+log4cplus 1.2.2+log4cplus 2.0.5完整的测试工程和库,请下载:
https://download.csdn.net/download/libaineu2004/12120914
------------------------------------------
参考文献
https://github.com/xiaodajiang/logcc 基于log4cplus封装的简单易用的c++日志库
https://blog.csdn.net/u014695839/article/details/84753599 博文讲解之Hello world程序
https://blog.csdn.net/calmreason/article/details/52025726 博文讲解之初始化