Log4j printing to console twice

Before with one class, logging was working well, but after I added 2nd Java class, it is logging twice in this second class. Can anyone help me, how to make it log only once. The problem seems to be in this log4j.xml file, because if I comment out appender, it is logging once, but I don’t want to change the code in log4j sufficiently, because then I am afraid logging will not work properly in the 1st class.

<?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>

Answer

By default loggers inherit appenders, and each appender creates log entries. In your case the “com.asaqa.score” logger inherits from root. You can turn this off by setting additivity to false. And you should complete the config of your logger to include an appender

<logger name="com.asaqa.score" additivity="false">
    <level value="all"/>
    <appender-ref ref="console"/>
</logger>

Also, the error below suggests you’re using the old version of log4j. You may want to consider upgrading to log4j 2. In fact, it’s recommended by Apache themselves.

On August 5, 2015 the Logging Services Project Management Committee announced that Log4j 1.x had reached end of life. For complete text of the announcement please see the Apache Blog. Users of Log4j 1 are recommended to upgrade to Apache Log4j 2.

When you do, note that there are some changes to the config syntax.

Leave a Reply

Your email address will not be published. Required fields are marked *