转自:http://blog.csdn.net/mr0pengpeng/article/details/20727753
Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。
下载的原始文件包中没有包含编译后的开发库,需要自己编译生成,下面简要介绍log4cxx在vs2010上的编译。
log4cxx的编译需要三个文件夹所包含的内容,分别为:
1.apach-log4cxx-0.10.0.zip http://logging.apache.org/log4cxx/index.html
2.apr-1.2.11-win32-src.zip http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip
3.apr-util-1.2.10-win32-src.zip http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip
a. 将apr-1.2.11-win32-src.zip解压后的文件名修改为:apr
b. 将apr-util-1.2.10-win32-src.zip解压后的文件名修改为:apr-util
c. 在运行命令栏中输入cmd,进入apache-log4cxx-0.10.0目录
d. 输入configure命令,执行configure.bat批处理文件
e. 输入configure-aprutil命令,执行configure-aprutil.bat批处理文件,此时可能会提示找不到sed命令的错误,下载sed工具并安装(http://sourceforge.net/projects/gnuwin32/files/sed/sed-4.2-1-setup.exe/download)并将安装目录下的bin加入环境变量内;,然后重新执行configure-aprutil.bat
f. 进入apache-log4cxx-0.10.0->projects,用vs2010打开log4cxx.dsw,将log4cxx工程设为启动项目,然后编译。
编译过程中会出现很多错误,主要都是error C2252: an explicit instantiation of a template can only occur at namespace scope这个,解决办法:
#define LOG4CXX_LIST_DEF(N, T) /
template class LOG4CXX_EXPORT std::allocator<T>; /
template class LOG4CXX_EXPORT std::vector<T>; /
typedef std::vector<T> N
替换为
#define LOG4CXX_LIST_DEF(N, T) /
typedef std::vector<T> N
编译成功后,链接过程又抛一大堆链接错误,主要说找不要一些obj(apr,apr-util,xml)。解决办法:手动把这些相关项目的引用给添上(apr,apr-util,xml)。
接下来编译成功后可看到debug下出现log4cxx.lib,log4cxx.dll。
在可执行文件目录下添加dll文件,并且将头文件目录加入项目属性中。此外,log4cxx还可根据日期,大小生成日志文件,如:
按日期生成:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.DatePattern = yyyy-MM-dd ‘.log’
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
以上配置是每天产生一个备份文件。每天生成的日志名称为 yyyy-mm-dd.log 。
类似的,如果需要每月产生一个文件可以修改上面的配置:
将 log4j.appender.R.DatePattern = yyyy-MM-dd ‘.log’
改为 log4j.appender.R.DatePattern = yyyy-MM ‘.log’
-
顶
- 0