VC2010下编译log4cxx(windows环境下)

本文介绍了如何在Visual C++ 2010环境下配置并使用log4cxx库,包括解决编译过程中遇到的问题,以及如何创建并测试log4cxx的日志DLL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近一段时间在使用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

    

#include <log4cxx/logger.h>  
#include <log4cxx/propertyconfigurator.h>  
using namespace std;  
using namespace log4cxx;  
int main(int argc, char* argv[])  
{  
    string trace = "fa";  
    string Property = "./log.properties";  
    log4cxx::PropertyConfigurator::configure(Property);  
    LoggerPtr logger = Logger::getLogger(trace);  
    logger->info(("How to use?"));  
    LOG4CXX_INFO(logger, ("你说Hello"));  
    for (int i = 0; i < 2; i++)  
    {  
        LOG4CXX_DEBUG(logger, "DEBUG");  
        LOG4CXX_INFO(logger, "INFO");  
        LOG4CXX_WARN(logger, "WARN");  
        LOG4CXX_ERROR(logger, "ERROR");  
    }  
    return 0;  
} 

log4cxx.properties

 
# 设置root logger为DEBUG级别,使用了ca和fa两个Appender  
log4j.rootLogger=DEBUG, ca, fa  
   
#对Appender fa进行设置:  
# 这是一个文件类型的Appender,  
# 其输出文件(File)为./output.log,  
# 输出方式(Append)为覆盖方式,  
# 输出格式(layout)为PatternLayout  
log4j.appender.fa=org.apache.log4j.FileAppender  
log4j.appender.fa.File=./output.log  
log4j.appender.fa.Append=false  
log4j.appender.fa.layout=org.apache.log4j.PatternLayout  
log4j.appender.fa.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n  
   
#对Appender ca进行设置  
# 这是一个控制台类型的Appender  
#  输出格式(layout)为PatternLayout  
log4j.appender.ca=org.apache.log4j.ConsoleAppender  
log4j.appender.ca.layout=org.apache.log4j.PatternLayout  
log4j.appender.ca.layout.ConversionPattern=%d [%t] %-5p %.16c - %m%n

参考网文:

1、http://blog.youkuaiyun.com/rabbit729/archive/2008/08/05/2772179.aspx

2、http://www.hwcrazy.com/topic.action?idTopic=ff80818129d0e3210129d0e61fb30001#

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值