天天看点

我个人的log4cplus-1.2.2的编译与测试使用,Win7+VS2013环境

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

博文讲解之初始化

继续阅读