2017-04-24 140 views
2

以前只有一个类,日志记录运行良好,但是在我添加第二个Java类之后,它在此第二个类中记录了两次。任何人都可以帮助我,如何让它只记录一次。这个问题似乎是在这个log4j.xml文件中,因为如果我注释掉appender,它会记录一次,但我不想在log4j中充分更改代码,因为那么恐怕日志记录将无法正常工作第一堂课。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> 

回答

2

默认情况下,记录器会继承appender,每个appender会创建日志条目。在你的情况下,“com.asaqa.score”记录器从根继承。您可以通过将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

+0

log4j:WARN记录器(com.asaqa.score.crawler)找不到appender。 log4j:WARN请正确初始化log4j系统。 log4j:WARN请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig了解更多信息。 –

+0

啊。对。编辑我的答案... –

+0

它没有打印任何东西到控制台。 –