使用log4j写入多个日志文件时,我遇到重复日志消息的问题.
目前我正在试图登录INFO级数据(及以上)为指定特定的记录foobar的在我的foo.log文件,然后所有WARN的级别的日志消息(及以上)的所有记录中bar.log的文件.
因此,重复的日志消息被写入foo.log文件(每行记录两次),经过一些快速研究后,我发现修复此问题的建议是添加log4j.additivity.foobar=false到我的属性文件中.
这样做的问题是虽然它会阻止重复行,WARN但foobar记录器中的消息永远不会写入bar.log文件.
我的log4j属性文件如下:
log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO, FOO
log4j.additivity.foobar = false
log4j.appender.FOO = org.apache.log4j.RollingFileAppender
log4j.appender.FOO.layout = org.apache.log4j.PatternLayout
log4j.appender.FOO.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.FOO.File = foo.log
log4j.appender.BAR = org.apache.log4j.RollingFileAppender
log4j.appender.BAR.layout = org.apache.log4j.PatternLayout
log4j.appender.BAR.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.BAR.File = bar.log
Run Code Online (Sandbox Code Playgroud)
有谁知道如何将日志消息写入两个日志文件(就像我在开始设置additivity属性之前一样)并且仍然阻止重复的日志消息?
请注意,这是问题的简要概述.在现实世界中,有多个记录器和两个以上的日志文件
My *_*rts 61
这个问题可以分两部分来解决.
1.防止重复的日志消息
日志消息被写入两次,因为我们在rootLogger和log4j.logger.foobar类别中列出了FOO appender .所以我们必须删除appender并仅在类别中定义日志记录级别:
log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO
Run Code Online (Sandbox Code Playgroud)
这意味着信息从级别的消息log4j.logger.foobar向上传播到所有伐木者的附加目的地在rootLogger,但仅会被写入到每个日志文件.
2.防止将INFO级别的消息写入bar.log
由于所有的的INFO级别的日志信息log4j.logger.foobar类别正在由追加程序继承rootLogger,我们需要停止BAR的appender用于记录INFO级别的消息.
我们可以通过在BAR appender本身上设置Threshold属性来实现这一点:
log4j.appender.BAR.Threshold = WARN
Run Code Online (Sandbox Code Playgroud)
这将阻止在bar.log文件中记录INFO级别语句,因为它只接受WARN级别和更高级别.
所以完整的log4j属性文件如下:
log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO
log4j.appender.FOO = org.apache.log4j.RollingFileAppender
log4j.appender.FOO.layout = org.apache.log4j.PatternLayout
log4j.appender.FOO.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.FOO.File = foo.log
log4j.appender.FOO.Threshold = INFO
log4j.appender.BAR = org.apache.log4j.RollingFileAppender
log4j.appender.BAR.layout = org.apache.log4j.PatternLayout
log4j.appender.BAR.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.BAR.File = bar.log
log4j.appender.BAR.Threshold = WARN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76176 次 |
| 最近记录: |