一个班级的两个日志

时间:2015-05-27 17:54:38

标签: java log4j

我正在研究jdk 1.6,我有一个类需要使用log4j登录到2个不同的日志文件。我已经阅读了许多其他答案,但我不能按照我想要的方式工作。这是我的log4j属性。

log4j.debug=false
log4j.rootLogger=ERROR, appLog

log4j.logger.com.my.apps.idm.transactionalemail=DEBUG, appLog, infoLog

log4j.appender.appLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.appLog.File=/opt/apps/logs/${ni.cluster}/TransactionalEmail/1.0/TransactionalEmail.log
log4j.appender.appLog.DatePattern='.'yyyy-MM-dd
log4j.appender.appLog.layout=org.apache.log4j.PatternLayout
log4j.appender.appLog.layout.ConversionPattern=DATE: %d{DATE}%nPRIORITY: %p%nCATEGORY: %c%nTHREAD: %t%nNDC: %x%nMESSAGE:%m%n%n

log4j.appender.infoLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoLog.File=/opt/apps/logs/${ni.cluster}/TransactionalEmail/1.0/Info.log
log4j.appender.infoLog.DatePattern='.'yyyy-MM-dd
log4j.appender.infoLog.layout=org.apache.log4j.PatternLayout
log4j.appender.infoLog.layout.ConversionPattern=DATE: %d{DATE}%nPRIORITY: %p%nCATEGORY: %c%nTHREAD: %t%nNDC: %x%nMESSAGE:%m%n%n

我希望这个工作的方式就像这样

public class MyClass{
    private static final LOG = Logger.getLogger("appLog");
    private static final INFO_LOG = Logger.getLogger("infoLog");

    public void myMethod(){
        INFO_LOG.debug("This is info");
        LOG.debug("This is debug");
    }
}

当我运行我的应用程序时会发生的事情是Info.log与TransactionalEmail.log具有相同的信息,并且该行"这是一个测试"不会显示在任一日志文件中。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我建议不要为类使用多个记录器实例。利用log4j的配置来处理日志事件的生成。您可能需要查看Routing File Appender以确定如何处理日志事件。从链接

  

RoutingAppender评估LogEvents,然后将它们路由到从属Appender。目标Appender可以是先前配置的appender,可以通过其名称引用,也可以根据需要动态创建Appender。应该在它引用的任何Appender之后配置RoutingAppender以允许它正确关闭。