Log4j打印到控制台两次

时间:2017-04-24 15:12:37

标签: java selenium logging

在使用一个类之前,日志记录运行良好,但在我添加第二个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>

1 个答案:

答案 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