Migrating Log4j1 to Log4j2 for Spring 3 + Java8 App, but some logs are only printing on Console instead of Log file, what is missing

214 views Asked by At

I have to migrate an old Java 8 app from Log4j 1.x to Log4j2 due to vulnerability, application is running fine without issues but logs are not appearing properly in log file.

This is the old log4j.xml file.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="ERROR" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p [%t] [%c] %m%n" />
        </layout>
    </appender>

    <appender name="APPLOG" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="@LOG_DIR@/@LOG_FILE_NAME@" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="15MB" />
        <param name="MaxBackupIndex" value="10" />
        <param name="Threshold" value="@THRESHOLD@" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p [%t] [%c] %m%n" />
        </layout>
    </appender>

    <appender name="AUDITLOG" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="@AUDIT_LOG_DIR@/@AUDIT_LOG_FILE_NAME@"/>
        <param name="Append" value="true"/>
        <param name="Threshold" value="INFO"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd-HH" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%t] %m%n"/>
        </layout>
   </appender>
   
    <category name="com.abc" additivity="false">
        <priority value="@THRESHOLD@" />
        <appender-ref ref="APPLOG" />
    </category>

    <category name="org.httpclient" additivity="false">
        <priority value="INFO" />
        <appender-ref ref="APPLOG" />
    </category>

    <category name="org.springframework" additivity="false">
        <priority value="INFO" />
        <appender-ref ref="APPLOG" />
    </category>

    <category name="com.mchange.v2" additivity="false">
        <priority value="INFO" />
        <appender-ref ref="APPLOG" />
    </category>

    <category name="org.mortbay" additivity="false">
        <priority value="INFO" />
        <appender-ref ref="APPLOG" />
    </category>

    <category name="org.apache" additivity="false">
        <priority value="INFO" />
        <appender-ref ref="APPLOG" />
    </category>

    <category name="AUDIT_LOGGER" additivity="false">
        <priority value="INFO" />
        <appender-ref ref="AUDITLOG"/>
    </category>
    
    <!-- Setup the Root category -->
    <root>
        <priority value="@THRESHOLD@" />
        <appender-ref ref="APPLOG" />
    </root>
</log4j:configuration>

This is converted log4j2.xml file

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <!--<Properties>
        <Property name="logPath">target/cucumber-logs</Property>
        <Property name="rollingFileName">cucumber</Property>
    </Properties>-->
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] [%c] %m%n"/>
            <ThresholdFilter level="ERROR"/>
        </Console>
        <RollingFile name="APPLOG" append="true"
                     fileName="@LOG_DIR@/@LOG_FILE_NAME@"
                     filePattern="@LOG_DIR@/@LOG_FILE_NAME@.%d{yyyy-MM-dd-HH}">
            <PatternLayout pattern="%d %-5p [%t] [%c] %m%n"/>
            <ThresholdFilter level="@THRESHOLD@"/>
            <SizeBasedTriggeringPolicy size="15 MB"/>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
        <RollingFile name="AUDITLOG" append="true"
                     fileName="@AUDIT_LOG_DIR@/@AUDIT_LOG_FILE_NAME@"
                     filePattern="@AUDIT_LOG_DIR@/@AUDIT_LOG_FILE_NAME@.%d{yyyy-MM-dd-HH}">
            <PatternLayout pattern="[%t] %m%n"/>
            <ThresholdFilter level="INFO"/>
                <!-- Causes a rollover once the date/time pattern no longer applies to the active file -->
            <TimeBasedTriggeringPolicy modulate="true"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!-- Category definitions -->
        <Logger name="com.abc" level="@THRESHOLD@" additivity="false">
            <AppenderRef ref="APPLOG"/>
        </Logger>
        <Logger name="org.httpclient" level="INFO" additivity="false">
            <AppenderRef ref="APPLOG"/>
        </Logger>
        <Logger name="org.springframework" level="INFO" additivity="false">
            <AppenderRef ref="APPLOG"/>
        </Logger>
        <Logger name="com.mchange.v2" level="INFO" additivity="false">
            <AppenderRef ref="APPLOG"/>
        </Logger>
        <Logger name="org.mortbay" level="INFO" additivity="false">
            <AppenderRef ref="APPLOG"/>
        </Logger>
        <Logger name="org.apache" level="INFO" additivity="false">
            <AppenderRef ref="APPLOG"/>
        </Logger>
        <Logger name="AUDIT_LOGGER" level="INFO" additivity="false">
            <AppenderRef ref="AUDITLOG"/>
        </Logger>

        <!-- Setup the Root category -->
        <Root level="DEBUG">
            <AppenderRef ref="APPLOG" level="@THRESHOLD@"/>
        </Root>
    </Loggers>
</Configuration>

Not sure what is missing/wrong in the log4j2 file but some logs only appear in Console and not in log file even though I am expecting exactly opposite.I have configured Console for only Error messages, and log file to contain messages like Info,Debug. I am clueless, can someone help here?

Note: @LOG_DIR@/@LOG_FILE_NAME@ - These variable values are replaced during build time.

0

There are 0 answers