VC2010下编译log4cxx(windows环境下)

最近一段时间在使用C++写程序,其中需要使用日志功能,便顺手“拿来”了log4cxx。从Apache网站上下载的log4cxx只有源代码,需要自己编译出dll,通过官方文档所说的办法编译,出现了一些小问题,参考了网上“高人”的网文,自己整理了其中的一些错误的解决办法:

    1、准备工作

unzip apr-1.2.11-win32-src.zip

rename apr-1.2.11 apr

unzip apr-util-1.2.10-win32-src.zip

rename apr-util-1.2.10 apr-util

cd apache-log4cxx-0.10.0

configure

configure-aprutil

其中执行configure-aprutil时候说sed命令不存在,解决办法:下载sed for windows,并且把bin路径赋值给环境变量PATH。

    2、Visual C++ 2010打开log4cxx项目编译

         1)通过VC++ 2010打开项目,VC会自动做项目转换,一般来说这里不会出错。接着选择log4cxx为Active Project,编译。出现一大堆错误。主要都是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

        2)编译成功后,链接过程又抛一大堆链接错误,主要说找不要一些obj(apr,apr-util,xml)。解决办法:手动把这些相关项目的LIBD给添上。

       

    3、测试log4cxx的DLL

        在测试项目里添加include和lib指向,把dll添加到项目的文件夹里,编写测试cpp文件,编写log4cxx.properties文件,编译运行即可。

    test.cpp

    

[cpp]  view plain copy
  1. #include <log4cxx/logger.h>  
  2. #include <log4cxx/propertyconfigurator.h>  
  3. using namespace std;  
  4. using namespace log4cxx;  
  5. int main(int argc, char* argv[])  
  6. {  
  7.     string trace = "fa";  
  8.     string Property = "./log.properties";  
  9.     log4cxx::PropertyConfigurator::configure(Property);  
  10.     LoggerPtr logger = Logger::getLogger(trace);  
  11.     logger->info(("How to use?"));  
  12.     LOG4CXX_INFO(logger, ("你说Hello"));  
  13.     for (int i = 0; i < 2; i++)  
  14.     {  
  15.         LOG4CXX_DEBUG(logger, "DEBUG");  
  16.         LOG4CXX_INFO(logger, "INFO");  
  17.         LOG4CXX_WARN(logger, "WARN");  
  18.         LOG4CXX_ERROR(logger, "ERROR");  
  19.     }  
  20.     return 0;  
  21. }  
 

    log4cxx.properties

    

[cpp]  view plain copy
  1. # 设置root logger为DEBUG级别,使用了ca和fa两个Appender  
  2. log4j.rootLogger=DEBUG, ca, fa  
  3.    
  4. #对Appender fa进行设置:  
  5. # 这是一个文件类型的Appender,  
  6. # 其输出文件(File)为./output.log,  
  7. # 输出方式(Append)为覆盖方式,  
  8. # 输出格式(layout)为PatternLayout  
  9. log4j.appender.fa=org.apache.log4j.FileAppender  
  10. log4j.appender.fa.File=./output.log  
  11. log4j.appender.fa.Append=false  
  12. log4j.appender.fa.layout=org.apache.log4j.PatternLayout  
  13. log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n  
  14.    
  15. #对Appender ca进行设置  
  16. # 这是一个控制台类型的Appender  
  17. #  输出格式(layout)为PatternLayout  
  18. log4j.appender.ca=org.apache.log4j.ConsoleAppender  
  19. log4j.appender.ca.layout=org.apache.log4j.PatternLayout  
  20. log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值