《Log4j2官方文档》从Log4j 1.x迁移

从Log4j 1.x迁移

使用Log4j 1.x桥接

转换到Log4j 2的最简单方法,也许就是把log4j 1.x的jar文件替换为Log4j 2的log4j-1.2-api.jar。然而,要让这个方式可以使用,应用必须满足以下要求:

转换为Log4j 2的API

在大多数情况下,从Log4j 1.x的API转换为Log4j 2应该是相当简单的。许多日志语句将不需要任何调整。然而,以下改变必须调整。

  • 在API中org.apache.log4j.Logger.setLevel()或者类似的方法调用不再支持,应用应该移除这些代码。Log4j 2实现类中提供了相同的功能, 见org.apache.logging.log4j.core.config.Configurator.setLevel()方法,但是可能让应用更容易受到Log4j 2内部变更的影响。
  • 在适当的地方,应该使用参数化消息替代字符串拼接。
  • org.apache.log4j.MDCorg.apache.log4j.NDC >已经替换为Thread Context
  • 配置Log4j 2

    虽然Log4j 2的配置语法不同于Log4j 1.x, 但是即使不是全部,也是具备大多数同样的功能的。

    需要注意的是,通过${foo}插入系统属性的功能,已经扩展成支持从许多不同的来源中查找属性。详细信息可以查阅Lookups的文档。例如,要查找名为catalina.base的系统属性,在Log4j 1.x,语法应该是${catalina.base},而在Log4j 2, 语法就应该是${sys:catalina.base}

    下面是Log4j 1.x和相对应的Log4j 2的配置示例。

    实例1 – 使用Console Appender的简单配置

    Log4j 1.x XML配置

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <!DOCTYPE log4j:configuration PUBLIC “-//APACHE//DTD LOG4J 1.2//EN” “log4j.dtd”>
      3. <log4j:configuration xmlns:log4j=‘http://jakarta.apache.org/log4j/’>
      4. <appender name=“STDOUT” class=“org.apache.log4j.ConsoleAppender”>
      5. <layout class=“org.apache.log4j.PatternLayout”>
      6. <param name=“ConversionPattern” value=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      7. </layout>
      8. </appender>
      9. <category name=“org.apache.log4j.xml”>
      10. <priority value=“info” />
      11. </category>
      12. <Root>
      13. <priority value =“debug” />
      14. <appender-ref ref=“STDOUT” />
      15. </Root>
      16. </log4j:configuration>

    Log4j 2 XML配置

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <Configuration>
      3. <Appenders>
      4. <Console name=“STDOUT” target=“SYSTEM_OUT”>
      5. <PatternLayout pattern=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      6. </Console>
      7. </Appenders>
      8. <Loggers>
      9. <Logger name=“org.apache.log4j.xml” level=“info”/>
      10. <Root level=“debug”>
      11. <AppenderRef ref=“STDOUT”/>
      12. </Root>
      13. </Loggers>
      14. </Configuration>

    实例2 – 使用File Appender的简单配置

    Log4j 1.x XML配置

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <!DOCTYPE log4j:configuration PUBLIC “-//APACHE//DTD LOG4J 1.2//EN” “log4j.dtd”>
      3. <log4j:configuration xmlns:log4j=“http://jakarta.apache.org/log4j/”>
      4. <appender name=“A1” class=“org.apache.log4j.FileAppender”>
      5. <param name=“File” value=“A1.log” />
      6. <param name=“Append” value=“false” />
      7. <layout class=“org.apache.log4j.PatternLayout”>
      8. <param name=“ConversionPattern” value=“%t %-5p %c{2} – %m%n”/>
      9. </layout>
      10. </appender>
      11. <appender name=“STDOUT” class=“org.apache.log4j.ConsoleAppender”>
      12. <layout class=“org.apache.log4j.PatternLayout”>
      13. <param name=“ConversionPattern” value=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      14. </layout>
      15. </appender>
      16. <category name=“org.apache.log4j.xml”>
      17. <priority value=“debug” />
      18. <appender-ref ref=“A1” />
      19. </category>
      20. <root>
      21. <priority value =“debug” />
      22. <appender-ref ref=“STDOUT” />
      23. </Root>
      24. </log4j:configuration>

    Log4j 2 XML配置

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <Configuration>
      3. <Appenders>
      4. <File name=“A1” fileName=“A1.log” append=“false”>
      5. <PatternLayout pattern=“%t %-5p %c{2} – %m%n”/>
      6. </File>
      7. <Console name=“STDOUT” target=“SYSTEM_OUT”>
      8. <PatternLayout pattern=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      9. </Console>
      10. </Appenders>
      11. <Loggers>
      12. <Logger name=“org.apache.log4j.xml” level=“debug”>
      13. <AppenderRef ref=“A1”/>
      14. </Logger>
      15. <Root level=“debug”>
      16. <AppenderRef ref=“STDOUT”/>
      17. </Root>
      18. </Loggers>
      19. </Configuration>

    实例2 – SocketAppender

    Log4j 1.x XML配置。Log4j 1.x的例子容易令人误解。SocketAppender实际上并不使用Layout,配置一个Layout并不会有任何效果。

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <!DOCTYPE log4j:configuration PUBLIC “-//APACHE//DTD LOG4J 1.2//EN” “log4j.dtd”>
      3. <log4j:configuration xmlns:log4j=“http://jakarta.apache.org/log4j/”>
      4. <appender name=“A1” class=“org.apache.log4j.net.SocketAppender”>
      5. <param name=“RemoteHost” value=“localhost”/>
      6. <param name=“Port” value=“5000”/>
      7. <param name=“LocationInfo” value=“true”/>
      8. <layout class=“org.apache.log4j.PatternLayout”>
      9. <param name=“ConversionPattern” value=“%t %-5p %c{2} – %m%n”/>
      10. </layout>
      11. </appender>
      12. <appender name=“STDOUT” class=“org.apache.log4j.ConsoleAppender”>
      13. <layout class=“org.apache.log4j.PatternLayout”>
      14. <param name=“ConversionPattern” value=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      15. </layout>
      16. </appender>
      17. <category name=“org.apache.log4j.xml”>
      18. <priority value=“debug”/>
      19. <appender-ref ref=“A1”/>
      20. </category>
      21. <root>
      22. <priority value=“debug”/>
      23. <appender-ref ref=“STDOUT”/>
      24. </Root>
      25. </log4j:configuration>

    Log4j 2 XML配置

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <Configuration>
      3. <Appenders>
      4. <Socket name=“A1” host=“localHost” port=“5000”>
      5. <SerializedLayout/>
      6. </Socket>
      7. <Console name=“STDOUT” target=“SYSTEM_OUT”>
      8. <PatternLayout pattern=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      9. </Console>
      10. </Appenders>
      11. <Loggers>
      12. <Logger name=“org.apache.log4j.xml” level=“debug”>
      13. <AppenderRef ref=“A1”/>
      14. </Logger>
      15. <Root level=“debug”>
      16. <AppenderRef ref=“STDOUT”/>
      17. </Root>
      18. </Loggers>
      19. </Configuration>

    实例 4 – AsyncAppender

    使用AsyncAppender的Log4j 1.x XML配置。

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <!DOCTYPE log4j:configuration PUBLIC “-//APACHE//DTD LOG4J 1.2//EN” “log4j.dtd”>
      3. <log4j:configuration xmlns:log4j=“http://jakarta.apache.org/log4j/” configDebug=“true”>
      4. <appender name=“ASYNC” class=“org.apache.log4j.AsyncAppender”>
      5. <appender-ref ref=“TEMP”/>
      6. </appender>
      7. <appender name=“TEMP” class=“org.apache.log4j.FileAppender”>
      8. <param name=“File” value=“temp”/>
      9. <layout class=“org.apache.log4j.PatternLayout”>
      10. <param name=“ConversionPattern” value=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      11. </layout>
      12. </appender>
      13. <root>
      14. <priority value=“debug”/>
      15. <appender-ref ref=“ASYNC”/>
      16. </Root>
      17. </log4j:configuration>

    Log4j 2 XML配置

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <Configuration status=“debug”>
      3. <Appenders>
      4. <File name=“TEMP” fileName=“temp”>
      5. <PatternLayout pattern=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      6. </File>
      7. <Async name=“ASYNC”>
      8. <AppenderRef ref=“TEMP”/>
      9. </Async>
      10. </Appenders>
      11. <Loggers>
      12. <Root level=“debug”>
      13. <AppenderRef ref=“ASYNC”/>
      14. </Root>
      15. </Loggers>
      16. </Configuration>

    Sample 5 – AsyncAppender with Console and File

    使用AsyncAppender的Log4j 1.x XML配置。

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <!DOCTYPE log4j:configuration PUBLIC “-//APACHE//DTD LOG4J 1.2//EN” “log4j.dtd”>
      3. <log4j:configuration xmlns:log4j=“http://jakarta.apache.org/log4j/” configDebug=“true”>
      4. <appender name=“ASYNC” class=“org.apache.log4j.AsyncAppender”>
      5. <appender-ref ref=“TEMP”/>
      6. <appender-ref ref=“CONSOLE”/>
      7. </appender>
      8. <appender name=“CONSOLE” class=“org.apache.log4j.ConsoleAppender”>
      9. <layout class=“org.apache.log4j.PatternLayout”>
      10. <param name=“ConversionPattern” value=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      11. </layout>
      12. </appender>
      13. <appender name=“TEMP” class=“org.apache.log4j.FileAppender”>
      14. <param name=“File” value=“temp”/>
      15. <layout class=“org.apache.log4j.PatternLayout”>
      16. <param name=“ConversionPattern” value=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      17. </layout>
      18. </appender>
      19. <root>
      20. <priority value=“debug”/>
      21. <appender-ref ref=“ASYNC”/>
      22. </Root>
      23. </log4j:configuration>

    Log4j 2 XML配置。需要注意的是,Async Appender需要在Appender引用的后面配置,这样才能让它正确的关闭。

      1. <?xml version=“1.0” encoding=“UTF-8”?>
      2. <Configuration status=“debug”>
      3. <Appenders>
      4. <Console name=“CONSOLE” target=“SYSTEM_OUT”>
      5. <PatternLayout pattern=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      6. </Console>
      7. <File name=“TEMP” fileName=“temp”>
      8. <PatternLayout pattern=“%d %-5p [%t] %C{2} (%F:%L) – %m%n”/>
      9. </File>
      10. <Async name=“ASYNC”>
      11. <AppenderRef ref=“TEMP”/>
      12. <AppenderRef ref=“CONSOLE”/>
      13. </Async>
      14. </Appenders>
      15. <Loggers>
      16. <Root level=“debug”>
      17. <AppenderRef ref=“ASYNC”/>
      18. </Root>
      19. </Loggers>
      20. </Configuration>

     

    原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/113881.html

    (0)
    上一篇 2021年8月27日 07:15
    下一篇 2021年8月27日 07:15

    相关推荐

    发表回复

    登录后才能评论