带有多个文件的LOG4CPP

时间:2011-11-17 05:36:02

标签: c++ c apache

我有配置文件,它有两个文件appender的根类别。在编程方面我指定了两个类别。但这两个类别都有两个追加者。我尝试从每个类别中删除一个appender但它不起作用。在以下代码中。我想从categoryInfo中删除A2 appender,从categoryData中删除A1 Appender。

配置文件

    log4j.rootCategory=INFO, A1
    log4j.Categoty=INFO, A2
    log4j.appender.A1=org.apache.log4j.FileAppender
    log4j.appender.A1.fileName=A1.log
    log4j.appender.A1.layout=org.apache.log4j.BasicLayout

    log4j.appender.A2=org.apache.log4j.FileAppender
    log4j.appender.A2.fileName=A2.log
    log4j.appender.A2.layout=org.apache.log4j.BasicLayout

代码

    try 
    {
       log4cpp::PropertyConfigurator::configure("conf");
    }
    catch (log4cpp::ConfigureFailure e) 
    {
       cout<<"Log4cpp Error: "<<e.what()<<endl;
    }
    log4cpp::Category& categoryInfo = log4cpp::Category::getInstance("A1");
    log4cpp::Category& categoryData = log4cpp::Category::getInstance("A2");

    categoryInfo.setAdditivity(true);
    categoryData.setAdditivity(true);
    categoryData.setPriority(log4cpp::Priority::WARN);

    categoryInfo.removeAppender(log4cpp::Appender::getAppender(std::string("A2")));
    categoryData.removeAppender(log4cpp::Appender::getAppender(std::string("A1")));

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的意思。

但是你混淆了Category(Logger)和Appender?

根据我在Log4J中的经验,你的配置应该是这样的:

log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.fileName=A1.log
log4j.appender.A1.layout=org.apache.log4j.BasicLayout

log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.fileName=A2.log
log4j.appender.A2.layout=org.apache.log4j.BasicLayout

log4j.rootCategory=ERROR, A1
log4j.category.data=INFO, A1    # only A1 in data logger
log4j.category.info=INFO, A2    # only A2 in info logger

在您的代码中,只需获取类别&#34;数据&#34;和&#34;信息&#34;将为您提供具有所需行为的记录器