Migrating from Log4j 1.xUsing the Log4j 1.x bridgePerhaps the simplest way to convert to using Log4j 2 is to replace the log4j 1.x jar file with Log4j 2's log4j-1.2-api.jar. However, to use this successfully applications must meet the following requirements:
Converting to the Log4j 2 APIFor the most part, converting from the Log4j 1.x API to Log4j 2 should be fairly simple. Many of the log statements will require no modification. However, where necessary the following changes must be made.
Configuring Log4j 2Although the Log4j 2 configuration syntax is different than that of Log4j 1.x, most, if not all, of the same functionality is available. Note that system property interpolation via the ${foo} syntax has been extended to allow property lookups from many different sources. See the Lookups documentation for more details. For example, using a lookup for the system property named catalina.base, in Log4j 1.x, the syntax would be ${catalina.base}. In Log4j 2, the syntax would be ${sys:catalina.base}. Below are the example configurations for Log4j 1.x and their counterparts in Log4j 2. Sample 1 - Simple configuration using a Console AppenderLog4j 1.x XML configuration <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> <category name="org.apache.log4j.xml"> <priority value="info" /> </category> <Root> <priority value ="debug" /> <appender-ref ref="STDOUT" /> </Root> </log4j:configuration> Log4j 2 XML configuration <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> </Appenders> <Loggers> <Logger name="org.apache.log4j.xml" level="info"/> <Root level="debug"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration> Sample 2 - Simple configuration using a File AppenderLog4j 1.x XML configuration <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="A1" class="org.apache.log4j.FileAppender"> <param name="File" value="A1.log" /> <param name="Append" value="false" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/> </layout> </appender> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> <category name="org.apache.log4j.xml"> <priority value="debug" /> <appender-ref ref="A1" /> </category> <root> <priority value ="debug" /> <appender-ref ref="STDOUT" /> </Root> </log4j:configuration> Log4j 2 XML configuration <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <File name="A1" fileName="A1.log" append="false"> <PatternLayout pattern="%t %-5p %c{2} - %m%n"/> </File> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> </Appenders> <Loggers> <Logger name="org.apache.log4j.xml" level="debug"> <AppenderRef ref="A1"/> </Logger> <Root level="debug"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration> Sample 3 - SocketAppenderLog4j 1.x XML configuration. This example from Log4j 1.x is misleading. The SocketAppender does not actually use a Layout. Configuring one will have no effect. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="A1" class="org.apache.log4j.net.SocketAppender"> <param name="RemoteHost" value="localhost"/> <param name="Port" value="5000"/> <param name="LocationInfo" value="true"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/> </layout> </appender> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> <category name="org.apache.log4j.xml"> <priority value="debug"/> <appender-ref ref="A1"/> </category> <root> <priority value="debug"/> <appender-ref ref="STDOUT"/> </Root> </log4j:configuration> Log4j 2 XML configuration <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Socket name="A1" host="localHost" port="5000"> <SerializedLayout/> </Socket> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> </Appenders> <Loggers> <Logger name="org.apache.log4j.xml" level="debug"> <AppenderRef ref="A1"/> </Logger> <Root level="debug"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration> Sample 4 - AsyncAppenderLog4j 1.x XML configuration using the AsyncAppender. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" configDebug="true"> <appender name="ASYNC" class="org.apache.log4j.AsyncAppender"> <appender-ref ref="TEMP"/> </appender> <appender name="TEMP" class="org.apache.log4j.FileAppender"> <param name="File" value="temp"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> <root> <priority value="debug"/> <appender-ref ref="ASYNC"/> </Root> </log4j:configuration> Log4j 2 XML configuration. <?xml version="1.0" encoding="UTF-8"?> <Configuration status="debug"> <Appenders> <File name="TEMP" fileName="temp"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </File> <Async name="ASYNC"> <AppenderRef ref="TEMP"/> </Async> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="ASYNC"/> </Root> </Loggers> </Configuration> Sample 5 - AsyncAppender with Console and FileLog4j 1.x XML configuration using the AsyncAppender. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" configDebug="true"> <appender name="ASYNC" class="org.apache.log4j.AsyncAppender"> <appender-ref ref="TEMP"/> <appender-ref ref="CONSOLE"/> </appender> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> <appender name="TEMP" class="org.apache.log4j.FileAppender"> <param name="File" value="temp"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </layout> </appender> <root> <priority value="debug"/> <appender-ref ref="ASYNC"/> </Root> </log4j:configuration> Log4j 2 XML configuration. Note that the Async Appender should be configured after the appenders it references. This will allow it to shutdown properly. <?xml version="1.0" encoding="UTF-8"?> <Configuration status="debug"> <Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> <File name="TEMP" fileName="temp"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </File> <Async name="ASYNC"> <AppenderRef ref="TEMP"/> <AppenderRef ref="CONSOLE"/> </Async> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="ASYNC"/> </Root> </Loggers> </Configuration> |