《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=‘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>

转载自 并发编程网 - ifeve.com

时间: 2024-09-13 14:19:21

《Log4j2官方文档》从Log4j 1.x迁移的相关文章

《Log4j2官方文档》自动加载配置

Log4j可以在初始化的时候执行自动配置.当Log4j启动的时候,会首先定位所有的ConfigurationFactory的配置然后会根据权重进行从高到低的排序.目前的版本,Log4j包含了四种类型的ConfigurationFactory的实现,JSON,YAML,properties,XML. 1:Log4j将会检查 log4j.configurationFile的系统属性,如果已经设置了对应的属性,将会使用ConfigurationFactory对应的属性去加载配置. 2:如果没有设置对应

《LOG4J2官方文档》Chainsaw 可以自动处理你的日志文件(通知appender的配置)

对于所有的基于文件的appender和基于socket的appender,log4j提供通知appender 配置的详细信息的功能.例如,基于文件的appender,文件地址和格式化输出日志信息都包含在了log4j的通知里面.Chainsaw和其他外部系统能发现这些通知并聪明地利用这些通知去处理日志文件. 这种通知暴露的机制和通知格式是特定于每个通知者实现的,一个与特定通知者实现协作的外部系统必须明白,如何定位通知的配置和通知的格式.例如,一个数据库通知者可能在数据库表中存储了配置的详细信息,一

《Log4j2官方文档》Appenders配置

appender可以配置为具体的appender插件,或者是一个其type属性为appender插件名称的appender元素.此外,每个appender必须有一个name属性,其值在appenders集合内是唯一的.name属性的值将用在上一节loggers里指定的appender中. 大多数appender也支持自定义配置layout(可以配置为具体的layout插件,或者是一个其type属性为layout插件名称的layout元素).各个appender也会包含它们正常工作所需的其他属性或

《Log4j 2 官方文档》多余性(Additivity)

如果我们希望输出com.foo.Bar的TRACE等级的日志,而不像影响其他日志的输出.简单的改变日志等级是不能达到我们想要的目的:但是修改也很简单,只要我们添加一个新的Logger定义就可以达到目标. <Logger name="com.foo.Bar" level="TRACE"/> <Root level="ERROR"> <AppenderRef ref="STDOUT"> <

《Apache Velocity用户指南》官方文档

Quick Start 本项目是 Apache Velocity官方文档的中文翻译版,Velocity类似与JSP,是一种基于Java的模板引擎.它可以在web页面中引用Java代码中定义的数据和对象,而Velocity的作用就是把Web视图和java代码进行组装在一起.本次翻译主要针对对Velocity感兴趣和工作中使用到Velocity的开发人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助. 由于我也是第一次接触Velocity,还不是很深入,翻译的时候也查看了一些博客以及其他网

jQuery 1.4官方文档详细讲述新特性功能

为了庆祝jQuery的四周岁生日, jQuery的团队荣幸的发布了jQuery Javascript库的最新主要版本! 这个版本包含了大量的编程,测试,和记录文档的工作,我们为此感到很骄傲. 我要以个人的名义感谢 Brandon Aaron, Ben Alman, Louis-Rémi Babe, Ariel Flesler, Paul Irish, Robert Kati?, Yehuda Katz, Dave Methvin, Justin Meyer, Karl Swedberg, and

TestNG官方文档中文版(9)-重复失败测试,junit测试,jdk1.4支持

5.10 - Rerunning failed tests 套件中的测试失败时,每次testNG都会在输出目录中创建一个名为testng-failed.xml 的文件.这个xml文件包含只重新运行这些失败的测试方法的必要信息,容许只运行这些 失败的测试而不必运行全部测试.因此,一种典型的情况将是这样: java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs testng.xml java -classpat

TestNG官方文档中文版(6)-参数

5.5 - Parameters 测试方法不要求是无参数的.你可以在每个测试方法上使用任意数量的参数,并指示 testNG传递正确的参数. 有两种方式用于设置参数:使用testng.xml或者编程式. 5.5.1 - Parameters from testng.xml 如果你要为你的参数使用简单值,你可以在你的testng.xml中明确指定: @Parameters({ "first-name" }) @Test public void testSingleString(String

TestNG官方文档中文版(3)-testng.xml

TestNG的官方文档的中文翻译版第3章,原文请见 http://testng.org/doc/documentation-main.html 3 - testng.xml 调用TestNG由几种不同方法: * 使用testng.xml文件 * 使用ant * 从命令行 这节描述testng.xml的格式(文档的后面会讲到ant和命令行). 当前testng.xml的DTD文件可以从官方找到:http://testng.org/testng-1.0.dtd.( 为了方便使用,你可能更喜欢浏览HT