log4j根据类和级别输出到不同的文件

时间:2011-12-31 20:10:55

标签: java log4j

我想做的事情很简单,但我似乎无法使用log4j。

我需要2个日志文件。第一个应包含级别调试或以上的所有调试语句,但仅包含my.app。*

中的类

第二个日志文件应包含级别警告及以上的所有消息,无论源类如何。

我尝试了以下配置,但它不起作用:

log4j.rootLogger=warn,root
log4j.appender.root=org.apache.log4j.FileAppender
log4j.appender.root.layout = org.apache.log4j.PatternLayout
log4j.appender.root.layout.conversionPattern = %d [%t] %-5p %c - %m%n
log4j.appender.root.file = /tmp/logs/warn.file
log4j.appender.root.append = true
log4j.appender.root.MaxFileSize=10MB
log4j.appender.root.MaxBackupIndex=7

log4j.logger.my.app=debug,debugAppender
log4j.appender.debugAppender = org.apache.log4j.RollingFileAppender
log4j.appender.debugAppender.file = /tmp/logs/my.debug.file
log4j.appender.debugAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.debugAppender.layout.conversionPattern = %d [%t] %-5p %c - %m%n
log4j.appender.debugAppender.append = true
log4j.appender.debugAppender.MaxFileSize=10MB
log4j.appender.debugAppender.MaxBackupIndex=7
log4j.additivity.my.app=false

我认为问题出在最后一行。如果我将additive设置为true,那么调试和信息级别的消息也将添加到我的warn.file中。但是,如果我将其设置为false,则my.app的警告只会记录到debug.file。

1 个答案:

答案 0 :(得分:4)

您希望在每个appender上使用阈值 - 完全如Log Level per appender for a single Logger所述。

因此,将additivity设置为true,然后添加:

log4j.appender.root.Threshold=WARN

http://logging.apache.org/log4j/1.2/faq.html#a2.9处的更多详细信息:“是否可以按级别将日志输出定向到不同的appender?”

只是我的额外0.02美元:我建议切换到XML格式而不是属性格式 - 这将很好地为迁移到SLF4J / Logback做好准备,因为log4j正在迅速被替换为这是继任者的有价值的组合。