【发布时间】:2016-08-26 15:06:47
【问题描述】:
我不明白为什么 log4j 会以不同的格式附加两次。有人遇到过这种情况吗?
这是我的 log4j.xml 文件:
<log4j:configuration>
<appender name="async" class="org.apache.log4j.AsyncAppender">
<!-- this parameter need to be set to false to avoid application from hanging. -->
<param name="Blocking" value="false" />
<appender-ref ref="myAppender" />
</appender>
<appender name="myAppender" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{ISO8601} [%t] %c %x - %m%n" />
</layout>
</appender>
<logger name="com.server">
<level value="INFO" />
</logger>
<logger name="org.springframework">
<level value="INFO" />
</logger>
<logger name="org.hibernate.LazyInitializationException" additivity="false">
<level value="off" />
<appender-ref ref="async" />
</logger>
<logger name="net.sf.ehcache">
<level value="INFO" />
</logger>
<logger name="com.mchange">
<level value="INFO" />
</logger>
<root>
<priority value="INFO" />
<appender-ref ref="async" />
</root>
</log4j:configuration>
这是一些示例输出:
INFO 2016-08-26 11:01:38,353 [main] com.server.Server - Server started successfully...
11:01:38,353 INFO : Server started successfully...
编辑:当我将“myAppender”附加程序阈值更改为“ERROR”时,仍在生成显示的第二条日志消息(以时间开头的消息,而不是“INFO”)。是否有一些我需要禁用的默认记录器?似乎某些东西仍在记录那些“INFO”级别的消息,即使指定的附加程序是用于“ERROR”级别的消息。此外,如果我注释掉整个 log4j.xml 文件,第二条日志消息(以及所有类似的)仍在记录中。我怎样才能防止这种情况?谢谢!
【问题讨论】:
-
我认为那是因为您为同一件事使用了 2 个附加程序。尝试注释掉“异步”附加程序并将根子节点更改为
<appender-ref ref="myAppender" /> -
没有帮助,生成相同的重复输出
-
尝试用
name="org.hibernate.LazyInitializationException"注释掉完整的记录器 -
发生同样的问题
-
嗯,那我建议你把所有的loggers和appender都注释掉,从根目录开始一一添加