Log4j的:多记录仪,水平和追加程序(Log4j : Multiple loggers, leve

2019-07-04 06:42发布

我使用log4j的写入多个日志文件时具有重复的日志信息的麻烦。

目前我正在试图登录INFO级数据(及以上)的具体命名foob​​ar的记录器在我foo.log文件,然后所有WARN所有记录器级别的日志消息(及以上) bar.log文件。

由于这一结果,重复的日志消息被写入foo.log文件(每行已登录两次)和一些简单的研究,我发现,建议,解决这一问题后,添加log4j.additivity.foobar=false到我的属性文件。

这里的问题是,虽然它停止重复的线条, WARNfoob​​ar的记录信息都不会被写到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

有谁知道我可以写日志信息到两个日志文件(因为它是在做之前,我开始设置additivity属性),并且仍然防止重复的日志消息?

请注意,这是问题的简单概括。 在现实世界中的场景有多个记录器和两个以上的日志文件

Answer 1:

这个问题可以分为两个部分来解决。

1.防止重复日志消息

因为我们列出了rootLoggerlog4j.logger.foobar类别均FOO附加器的日志消息被写入两次。 因此,我们必须去掉附加器,只定义类的日志记录级别:

log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO

这意味着,从log4j.logger.foobarINFO级别的消息向上传播到所有伐木者追加程序rootLogger,但仅会被写入到每个日志文件。

被写入2.防止INFO级别消息bar.log

由于所有的log4j.logger.foobar类别INFO级别的日志信息正在受到rootLogger的追加程序继承,我们需要停止BAR的appender用于记录INFO级别的消息。

我们可以通过设置在BAR附加器本身的阈值属性做到这一点:

log4j.appender.BAR.Threshold = WARN

这将防止在bar.log文件被记录的信息级别陈述它只接受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


文章来源: Log4j : Multiple loggers, levels and appenders
标签: log4j