我正在研究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具有相同的信息,并且该行"这是一个测试"不会显示在任一日志文件中。
我做错了什么?
答案 0 :(得分:0)
我建议不要为类使用多个记录器实例。利用log4j的配置来处理日志事件的生成。您可能需要查看Routing File Appender以确定如何处理日志事件。从链接
RoutingAppender评估LogEvents,然后将它们路由到从属Appender。目标Appender可以是先前配置的appender,可以通过其名称引用,也可以根据需要动态创建Appender。应该在它引用的任何Appender之后配置RoutingAppender以允许它正确关闭。