在使用一个类之前,日志记录运行良好,但在我添加第二个Java类之后,它在第二个类中记录了两次。任何人都可以帮助我,如何让它只记录一次。问题似乎出现在这个log4j.xml文件中,因为如果我注释掉appender,它会记录一次,但我不想在log4j中更改代码,因为那时我恐怕日志记录无法正常工作第一节课。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: [%d{MMM-dd HH:mm:ss,SSS}] %c{3} - %m%n"/>
</layout>
</appender>
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="file" value="/user/Dave/log.out"/>
<param name="immediateFlush" value="true"/>
<param name="threshold" value="debug"/>
<param name="append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: [%d{MMM-dd HH:mm:ss,SSS}] %c{3} - %m%n"/>
</layout>
</appender>
<logger name="com.asaqa.score">
<level value="all"/>
</logger>
<!-- Root Logger -->
<root>
<priority value="error"/>
<appender-ref ref="console"/>
</root>
</log4j:configuration>
答案 0 :(得分:2)
默认情况下,记录器继承appender,每个appender创建日志条目。在你的情况下,&#34; com.asaqa.score&#34; logger继承自root。您可以将additivity
设置为false
来关闭此功能。您应该完成记录器的配置以包含一个appender
<logger name="com.asaqa.score" additivity="false">
<level value="all"/>
<appender-ref ref="console"/>
</logger>
此外,下面的错误表明您使用旧版本的log4j。您可能需要考虑升级到log4j 2。事实上,它是recommended by Apache themselves。
2015年8月5日,测井服务项目管理委员会宣布Log4j 1.x已达到使用寿命。有关公告的完整文本,请参阅Apache博客。建议用户使用Log4j 1升级到Apache Log4j 2。
如果您这样做,请注意some changes to the config syntax。