閱讀959 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Log4j2官方文檔》從Log4j 1.x遷移

從Log4j 1.x遷移

使用Log4j 1.x橋接

轉換到Log4j 2的最簡單方法,也許就是把log4j 1.x的jar文件替換為Log4j 2的log4j-1.2-api.jar。然而,要讓這個方式可以使用,應用必須滿足以下要求:

  1. 不能訪問Log4j 1.x的內部實現的方法和類,例如Appenders, LoggerRepository或者Category的callAppenders方法。
  2. 不能以編程方式配置Log4j。
  3. 不能通過調用類DOMConfigurator或PropertyConfigurator來進行配置。

轉換為Log4j 2的API

在大多數情況下,從Log4j 1.x的API轉換為Log4j 2應該是相當簡單的。許多日誌語句將不需要任何調整。然而,以下改變必須調整。

  1. 版本1的主包是org.apache.log4j, 在版本2是org.apache.logging.log4j
  2. 調用org.apache.log4j.Logger.getLogger()必須修改成org.apache.logging.log4j.LogManager.getLogger()。
  3. 調用org.apache.log4j.Logger.getRootLogger()或者org.apache.log4j.LogManager.getRootLogger()必須使用org.apache.logging.log4j.LogManager.getRootLogger()替換。
  4. 調用org.apache.log4j.Logger.getLogger,接受一個LoggerFactory參數,必須移除org.apache.log4j.spi.LoggerFactory並使用Log4j 2的其他擴展機製。
  5. 調用org.apache.log4j.Logger.getEffectiveLevel()需要替換成org.apache.logging.log4j.Logger.getLevel()。
  6. 移除org.apache.log4j.LogManager.shutdown()的調用, 在版本2中它不再需要,因為Log4j核心現在在啟動的時候會自動添加一個JVM關閉鉤子來處理任何關鍵的清理。
    1. 從Log4j 2.1開始,可以指定一個自定義的ShutdownCallbackRegistry來覆蓋默認的JVM關閉鉤子策略。
    2. 從Log4j 2.6開始,可以使用org.apache.logging.log4j.LogManager.shutdown()來手工初始化關閉邏輯。
  7. 在API中org.apache.log4j.Logger.setLevel()或者類似的方法調用不再支持,應用應該移除這些代碼。Log4j 2實現類中提供了相同的功能, 見org.apache.logging.log4j.core.config.Configurator.setLevel()方法,但是可能讓應用更容易受到Log4j 2內部變更的影響。
  8. 在適當的地方,應該使用參數化消息替代字符串拚接。
  9. org.apache.log4j.MDC和 org.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=‘https://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=“https://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=“https://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=“https://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=“https://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>

最後更新:2017-05-19 11:01:47

  上一篇:go  Spring Data 官方文檔》4.7 Spring Data擴展
  下一篇:go  《Log4j2官方文檔》自動加載配置