原文: https://howtodoinjava.com/log4j2/log4j-2-xml-configuration-example/

Apache Log4j2 是对 Log4j 1.x 的升级,与以前的版本相比有了显着改进,例如性能提高,自动重新加载已修改的配置文件, Java8 lambda 支持和自定义日志级别。

Log4j2.4 及更高版本需要 Java 7。 版本 2.0-alpha1 至 2.3 需要 Java 6。

1. log4j2 maven 依赖

要将 Log4j2 包含在您的项目中,请在项目中包含以下 maven 依赖项。

  1. <dependency>
  2. <groupId>org.apache.logging.log4j</groupId>
  3. <artifactId>log4j-api</artifactId>
  4. <version>2.6.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.logging.log4j</groupId>
  8. <artifactId>log4j-core</artifactId>
  9. <version>2.6.1</version>
  10. </dependency>

2. 用于控制台日志log4j2.xml

您可以使用下面的log4j2.xml将日志输出到控制台。 请注意,如果找不到配置文件,则将使用DefaultConfiguration。 这也将日志输出到控制台。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="INFO">
  3. <Appenders>
  4. <Console name="console" target="SYSTEM_OUT">
  5. <PatternLayout
  6. pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
  7. </Console>
  8. </Appenders>
  9. <Loggers>
  10. <Root level="debug" additivity="false">
  11. <AppenderRef ref="console" />
  12. </Root>
  13. </Loggers>
  14. </Configuration>

3. 用于滚动文件日志的log4j2.xml

您可以使用下面的log4j2.xml文件将日志输出到基于日期的滚动文件 – 以及控制台。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="warn">
  3. <Properties>
  4. <Property name="basePath">C:\\logs</Property>
  5. </Properties>
  6. <Appenders>
  7. <RollingFile name="fileLogger" fileName="${basePath}/app-info.log" filePattern="${basePath}/app-info-%d{yyyy-MM-dd}.log">
  8. <PatternLayout>
  9. <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
  10. </PatternLayout>
  11. <Policies>
  12. <TimeBasedTriggeringPolicy interval="1" modulate="true" />
  13. </Policies>
  14. </RollingFile>
  15. <Console name="console" target="SYSTEM_OUT">
  16. <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
  17. </Console>
  18. </Appenders>
  19. <Loggers>
  20. <Logger name="com.howtodoinjava" level="debug" additivity="true">
  21. <appender-ref ref="fileLogger" level="debug" />
  22. </Logger>
  23. <Root level="debug" additivity="false">
  24. <appender-ref ref="console" />
  25. </Root>
  26. </Loggers>
  27. </Configuration>

4. log4j2.xml文件位置

您应该将log4j2.xml放在应用的类路径中的任何位置。 Log4j 将扫描所有类路径位置以查找此文件,然后加载它。

Log4j2 xml 配置示例 - 图1

Log4j2.xml文件位置

5. log4j2.xml示例

让我们编写一个 Java 类,并写一些日志语句,以验证控制台和日志文件中的日志是否也在增加。 它将不同的日志级别记录到不同的日志中

  1. package com.howtodoinjava.log4j2.examples;
  2. import org.apache.logging.log4j.LogManager;
  3. import org.apache.logging.log4j.Logger;
  4. public class Log4j2HelloWorldExample
  5. {
  6. private static final Logger LOGGER = LogManager.getLogger(Log4j2HelloWorldExample.class.getName());
  7. public static void main(String[] args)
  8. {
  9. LOGGER.debug("Debug Message Logged !!!");
  10. LOGGER.info("Info Message Logged !!!");
  11. LOGGER.error("Error Message Logged !!!", new NullPointerException("NullError"));
  12. }
  13. }

现在,当您运行上述程序时,您将在控制台中获得以下日志。

  1. [DEBUG] 2016-06-16 12:17:42.972 [main] Log4j2HelloWorldExample - Debug Message Logged !!!
  2. [INFO ] 2016-06-16 12:17:42.996 [main] Log4j2HelloWorldExample - Info Message Logged !!!
  3. [ERROR] 2016-06-16 12:17:42.997 [main] Log4j2HelloWorldExample - Error Message Logged !!!
  4. java.lang.NullPointerException: NullError
  5. at com.howtodoinjava.log4j2.examples.Log4j2HelloWorldExample.main(Log4j2HelloWorldExample.java:14) [classes/:?]

如果您更改系统日期并再次运行该应用,则会在配置的位置找到两个日志文件,即app-info.logapp-info-2016-06-15.log –第二个文件将在该文件上滚动。

6. 带有多文件附加器的log4j2.xml

使用此简单log4j2.xml作为多个日志文件中的日志语句的快速参考。 它使用LevelRangeFilter将不同级别的日志(debuginfo等)记录到不同的文件中,以便您的日志干净且分开,以便于分析。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="WARN" monitorInterval="30">
  3. <!-- Logging Properties -->
  4. <Properties>
  5. <Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
  6. <Property name="APP_LOG_ROOT">c:/temp</Property>
  7. </Properties>
  8. <Appenders>
  9. <!-- Console Appender -->
  10. <Console name="Console" target="SYSTEM_OUT" follow="true">
  11. <PatternLayout pattern="${LOG_PATTERN}"/>
  12. </Console>
  13. <!-- File Appenders on need basis -->
  14. <RollingFile name="frameworkLog" fileName="${APP_LOG_ROOT}/app-framework.log"
  15. filePattern="${APP_LOG_ROOT}/app-framework-%d{yyyy-MM-dd}-%i.log">
  16. <LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
  17. <PatternLayout pattern="${LOG_PATTERN}"/>
  18. <Policies>
  19. <SizeBasedTriggeringPolicy size="19500KB" />
  20. </Policies>
  21. <DefaultRolloverStrategy max="10"/>
  22. </RollingFile>
  23. <RollingFile name="debugLog" fileName="${APP_LOG_ROOT}/app-debug.log"
  24. filePattern="${APP_LOG_ROOT}/app-debug-%d{yyyy-MM-dd}-%i.log">
  25. <LevelRangeFilter minLevel="DEBUG" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
  26. <PatternLayout pattern="${LOG_PATTERN}"/>
  27. <Policies>
  28. <SizeBasedTriggeringPolicy size="19500KB" />
  29. </Policies>
  30. <DefaultRolloverStrategy max="10"/>
  31. </RollingFile>
  32. <RollingFile name="infoLog" fileName="${APP_LOG_ROOT}/app-info.log"
  33. filePattern="${APP_LOG_ROOT}/app-info-%d{yyyy-MM-dd}-%i.log" >
  34. <LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
  35. <PatternLayout pattern="${LOG_PATTERN}"/>
  36. <Policies>
  37. <SizeBasedTriggeringPolicy size="19500KB" />
  38. </Policies>
  39. <DefaultRolloverStrategy max="10"/>
  40. </RollingFile>
  41. <RollingFile name="errorLog" fileName="${APP_LOG_ROOT}/app-error.log"
  42. filePattern="${APP_LOG_ROOT}/app-error-%d{yyyy-MM-dd}-%i.log" >
  43. <LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
  44. <PatternLayout pattern="${LOG_PATTERN}"/>
  45. <Policies>
  46. <SizeBasedTriggeringPolicy size="19500KB" />
  47. </Policies>
  48. <DefaultRolloverStrategy max="10"/>
  49. </RollingFile>
  50. <RollingFile name="perfLog" fileName="${APP_LOG_ROOT}/app-perf.log"
  51. filePattern="${APP_LOG_ROOT}/app-perf-%d{yyyy-MM-dd}-%i.log" >
  52. <PatternLayout pattern="${LOG_PATTERN}"/>
  53. <Policies>
  54. <SizeBasedTriggeringPolicy size="19500KB" />
  55. </Policies>
  56. <DefaultRolloverStrategy max="1"/>
  57. </RollingFile>
  58. <RollingFile name="traceLog" fileName="${APP_LOG_ROOT}/app-trace.log"
  59. filePattern="${APP_LOG_ROOT}/app-trace-%d{yyyy-MM-dd}-%i.log" >
  60. <PatternLayout pattern="${LOG_PATTERN}"/>
  61. <Policies>
  62. <SizeBasedTriggeringPolicy size="19500KB" />
  63. </Policies>
  64. <DefaultRolloverStrategy max="1"/>
  65. </RollingFile>
  66. </Appenders>
  67. <Loggers>
  68. <Logger name="com.howtodoinjava.app.somePackage" additivity="false" level="trace">
  69. <AppenderRef ref="traceLog" />
  70. <AppenderRef ref="Console" />
  71. </Logger>
  72. <Logger name="com.howtodoinjava.app" additivity="false" level="debug">
  73. <AppenderRef ref="debugLog" />
  74. <AppenderRef ref="infoLog" />
  75. <AppenderRef ref="errorLog" />
  76. <AppenderRef ref="Console" />
  77. </Logger>
  78. <Logger name="org.framework.package" additivity="false" level="info">
  79. <AppenderRef ref="perfLog" />
  80. <AppenderRef ref="Console"/>
  81. </Logger>
  82. <Root level="warn">
  83. <AppenderRef ref="Console"/>
  84. </Root>
  85. </Loggers>
  86. </Configuration>

学习愉快!