使用RollingRandomAccessFile Appender

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="WARN" monitorInterval="300">
  3. <properties>
  4. <property name="LOG_HOME">/Users/simon/output/log4j2</property>
  5. <property name="FILE_NAME">mylog</property>
  6. </properties>
  7. <Appenders>
  8. <Console name="Console" target="SYSTEM_OUT">
  9. <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  10. </Console>
  11. <RollingRandomAccessFile name="MyFile"
  12. fileName="${LOG_HOME}/${FILE_NAME}.log"
  13. filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log">
  14. <PatternLayout
  15. pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  16. <Policies>
  17. <TimeBasedTriggeringPolicy interval="1" />
  18. <SizeBasedTriggeringPolicy size="10 MB" />
  19. </Policies>
  20. <DefaultRolloverStrategy max="10" />
  21. </RollingRandomAccessFile>
  22. </Appenders>
  23. <Loggers>
  24. <Logger name="mylog" level="trace" additivity="false">
  25. <AppenderRef ref="MyFile" />
  26. </Logger>
  27. <Root level="error">
  28. <AppenderRef ref="Console" />
  29. </Root>
  30. </Loggers>
  31. </Configuration>

定义了两个常量方便后面复用
RollingRandomAccessFile的属性:
fileName 指定当前日志文件的位置和文件名称
filePattern 指定当发生Rolling时,文件的转移和重命名规则
SizeBasedTriggeringPolicy 指定当文件体积大于size指定的值时,触发Rolling
DefaultRolloverStrategy 指定最多保存的文件个数,依次按第i个来Roll
TimeBasedTriggeringPolicy 这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件。

Web配置

  1. <context-param>
  2. <param-name>log4jConfiguration</param-name>
  3. <param-value>/WEB-INF/conf/log4j2.xml</param-value>
  4. </context-param>
  5. <listener>
  6. <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
  7. </listener>

异步写日志

1.异步Appender, 写ArrayBlockingQueue

  1. <Appenders>
  2. ....
  3. <Async name="Async">
  4. <AppenderRef ref="MyFile" />
  5. </Async>
  6. </Appenders>

2.异步Logger

  1. <Loggers>
  2. <AsyncLogger name="com.foo.Bar" level="trace">
  3. <AppenderRef ref="RandomAccessFile"/>
  4. </AsyncLogger>
  5. </Loggers>