当前位置: 代码迷 >> Web前端 >> log4j重复打印的解决办法
  详细解决方案

log4j重复打印的解决办法

热度:452   发布时间:2013-10-15 16:47:37.0
log4j重复打印的解决方法

# Set log levels # ? ?

log4j.rootLogger = error, Console

log4j.logger.com.wadata.zhuchao.springmvc.HelloController = info, Console

? ?

#Console config set

log4j.logger.org.apache.velocity=OFF

#Console config set

log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %c : [%-5p] %x - %m%n

?

之前这样配置发现同样的日志会打印2次,试着把log4j.logger.com.wadata.zhuchao.springmvc.HelloController后的Console去掉,问题解决。

?

log4j的logger(旧版本称logger)是层次结构的,子logger会继承父logger的属性,appender也是可继承的属性,这常常容易导致配置错误而引起的log4j输出重复的log信息......
log4j的logger(旧版本称logger)是层次结构的,子logger会继承父logger的属性,appender也是可继承的属性,这常常 容易导致配置错误而引起的log4j输出重复的log信息。如果在在父子logger中引用了相同的appender时,例子:
??? <logger name="com.erry.model">
??????? <level value="DEBUG"/>
??????? <appender-ref ref="CONSOLE"/>
??? </logger>
??? <logger name="com.erry.service">
??????? <level value="DEBUG"/>
??????? <appender-ref ref="CONSOLE"/>
??? </logger>
??? <root>
??????? <level value="WARN"/>
??????? <appender-ref ref="CONSOLE"/>
??? </root>


由于子logger(com.erry.model和com.erry.service)继承了父logger(ROOT)的appender,加上其本 身引用的appender总共会在2个appender上输出消息,由于这两个appender实际上是同一个appender,所以结果会是相同的消息 被重复输出。解决这个问题很简单,只要注意不要重复引用父logger已经引用的appender即可。上述例子的正确配置如下:
????<logger name="com.erry.model">
??????? <level value="DEBUG"/>
??? </logger>
??? <logger name="com.erry.service">
??????? <level value="DEBUG"/>
??? </logger>
??? <root>
??????? <level value="WARN"/>
??????? <appender-ref ref="CONSOLE"/>
??? </root>

  相关解决方案