我有配置文件,它有根目录和两个文件追加器。在编程方面,我指定了两类。但这两个类别都有两个附加项。我试图从每个类别中删除一个附加程序,但它不起作用。在下面的代码中。我想从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")));

最佳答案

我不知道我是否明白你的意思。
但是你是不是把类别(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

在您的代码中,只需获取类别“data”和“info”就可以向记录器提供您所需的行为

10-07 19:12
查看更多