log4j:配置导致重复的消息写入日志文件

时间:2016-04-15 19:03:04

标签: java log4j

我使用的是log4j 1.2.17。我尝试配置log4j.properties,以便将消息写入控制台和日志文件。将消息写入控制台工作正常。我只看到每个日志消息写入日志文件的一个条目。但是,重复的消息正在写入日志文件。换句话说,对于写入日志的每个INFO,它被写入两次。我尝试使用可加性来控制它,但它似乎不起作用。我需要做些什么来纠正这种行为?

log4j.rootLogger=ERROR, R, C

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/storefrontPing.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d %t [%-5p] %c - %m%n
log4j.appender.R.Append = true
log4j.additivity.R = false

log4j.appender.C=org.apache.log4j.ConsoleAppender 
log4j.appender.C.layout=org.apache.log4j.PatternLayout 
log4j.appender.C.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n
log4j.appender.C.Target=System.out
log4j.additivity.C = false

log4j.logger.org.apache=ERROR, R
log4j.logger.org.apache=ERROR, C

log4j.logger.com.aktion.storefront.ping=INFO, C
log4j.logger.com.aktion.storefront.ping=INFO, R

REVISED

我将log4j.properties文件更改为以下内容。现在我将日志消息写入控制台,但没有写入日志文件。

log4j.rootLogger=ERROR, R, C

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.base}/logs/storefrontPing.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d %t [%-5p] %c - %m%n
log4j.appender.R.Append = true

log4j.appender.C=org.apache.log4j.ConsoleAppender 
log4j.appender.C.layout=org.apache.log4j.PatternLayout 
log4j.appender.C.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n
log4j.appender.C.Target=System.out

log4j.logger.com.aktion.storefront.ping=INFO

2 个答案:

答案 0 :(得分:1)

未在appender上配置Appender可加性但在记录器上配置(https://logging.apache.org/log4j/1.2/manual.html#additivity

由于您已将appender添加到根记录器,因此稍后无需再次添加它们。您应该使用所需的日志级别定义其他记录器:

log4j.logger.org.apache=ERROR
log4j.logger.org.apache=ERROR

log4j.logger.com.aktion.storefront.ping=INFO
log4j.logger.com.aktion.storefront.ping=INFO

并且,由于您没有将日志级别从根记录器更改为org.apache记录器,您甚至可以省略这些:

#log4j.logger.org.apache=ERROR
#log4j.logger.org.apache=ERROR

log4j.logger.com.aktion.storefront.ping=INFO
log4j.logger.com.aktion.storefront.ping=INFO

答案 1 :(得分:0)

additivity应设置在记录器级别,而不是appender,因此在您的情况下删除以下行:

log4j.additivity.R = false
log4j.additivity.C = false

并添加:

log4j.additivity.org.apache=false