Search code examples
javastruts2log4jlog4j2

How to configure log4j.xml for migrating from log4j to log4j2?


I am working on a application that was using log4j until now and I want to migrate to log4j2. I am a new to using log4j 2, referring the log4j 1.x migration guide but for some parts I am not clear about how the configuration in my log4j.xml should be.

Current log4j.xml file looks like this:


<?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 for logging to console output  -->
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="debug" />
        <layout class="org.apache.log4j.EnhancedPatternLayout">
            <param name="ConversionPattern" value="[%d{dd-MMM-yyyy HH:mm:ss:SSS}][%5p][%c{1}:%L]- %m%n" />
        </layout>
    </appender>
    
    <!-- Appender for logging audit messages to the file  -->
    <appender name="auditLoggerAppender" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="Threshold" value="debug" />
        
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="ActiveFileName" value="C:/logs/Filename.log" /> 
            <param name="FileNamePattern" value="C:/logs/Filename2.%d.log" />   
            <param name="MaxHistory" value="30" />  
        </rollingPolicy>
        
        <layout class="org.apache.log4j.EnhancedPatternLayout">
            <param name="ConversionPattern" value="[%d{dd-MMM-yyyy HH:mm:ss:SSS}][%5p][%c{1}:%L]- %m%n" />
        </layout>
    </appender>
    
    <!-- Logger for audit messages -->
    <logger name="auditLogger" additivity="false">
        <appender-ref ref="applicationLoggerAppender" />        
    </logger>
    
    
</log4j:configuration>

what configuration changes need to be made for <param>, <layout>, the <RollinFileAppender> part and <logger name="auditLogger" additivity="false"> <appender-ref ref="applicationLoggerAppender" /> </logger> for it to work with log4j 2 ?


Solution

  • In Log4j2 basically two aspects change in the XML configuration:

    • component types are not identified using their class name, but their plugin name. E.g. to create a RollingFileAppender (cf. javadoc) you'll use RollingFile instead of org.apache.logging.log4j.core.appender.RollingFileAppender,
    • all simple properties of a component are specified as XML attributes.

    The XML version of your appender (cf. Configuration File Syntax) will be:

        <RollingFile name="auditLoggerAppender"
                     fileName="C:\logs\Filename.log"
                     filePattern="C:\logs\Filename2.%d.log">
            <PatternLayout pattern="[%d{dd-MMM-yyyy HH:mm:ss:SSS}][%5p][%c{1}:%L]- %m%n"/>
            <ThresholdFilter level="DEBUG"/>
            <TimeBasedTriggeringPolicy/>
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
    

    Loggers are configured in a similar way:

        <Logger name="auditLogger" additivity="false">
            <AppenderRef ref="auditLoggerAppender" />
        </Logger>
    

    You can find all configuration parameters in: