【问题标题】:log4j output to different files depending on class and levellog4j 根据类和级别输出到不同的文件
【发布时间】:2011-12-31 20:10:55
【问题描述】:

我想做的很简单,但我似乎无法让它与 log4j 一起工作。

我需要 2 个日志文件。第一个应该包含所有 debug 或更高级别的调试语句,但只能来自 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

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

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    您需要在每个附加程序上使用阈值 - 完全按照 Log Level per appender for a single Logger 中的描述。

    所以将可加性设置为 true,然后添加:

    log4j.appender.root.Threshold=WARN
    

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

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

    【讨论】:

    • 谢谢,添加 log4j.appender.root.Threshold=WARN 效果很好。这是否记录在案?我拥有的唯一文档是logging.apache.org/log4j/1.2/manual.html,该页面甚至没有提到阈值。
    • @MTilsted - 是的,它记录在我包含在答案中的常见问题解答链接中。
    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多