簡體   English   中英

log4j根據類和級別輸出到不同的文件

[英]log4j output to different files depending on class and level

我想要做的很簡單,但我似乎無法使用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。

您將希望在每個appender上使用閾值 - 完全如單個Logger的每個appender的Log Level所述。

因此,將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很快被這個有價值的后繼組合所取代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM