log4j:配置导致将重复消息写入日志文件
log4j: configuration causes duplicate messages to be written to the log file
我正在使用 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
修订
我将 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
Appender 可加性不是在 appender 上配置的,而是在 logger 上配置的 (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
additivity
应该设置在记录器级别,而不是附加程序,因此在您的情况下删除以下行:
log4j.additivity.R = false
log4j.additivity.C = false
并添加:
log4j.additivity.org.apache=false
我正在使用 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
修订
我将 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
Appender 可加性不是在 appender 上配置的,而是在 logger 上配置的 (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
additivity
应该设置在记录器级别,而不是附加程序,因此在您的情况下删除以下行:
log4j.additivity.R = false
log4j.additivity.C = false
并添加:
log4j.additivity.org.apache=false