原文: https://howtodoinjava.com/log4j2/log4j2-rollingfileappender-example/

Log4j2 RollingFileAppenderOutputStreamAppender,它按照有关何时应进行滚动(备份)的已配置触发策略,将日志消息写入文件。 它还具有有关如何转换文件的已配置转换策略。

通常,日志文件的备份是根据文件大小和/或当前日期创建的。

1. Log4j2 Maven 依赖项

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

maven 仓库中检查最新版本。

2. Log4j2 RollingFileAppender示例 – 基于日志文件大小的滚动

此给定的配置根据日志文件大小滚动日志文件。 我已将日志文件大小配置为 10 MB。 根据您的要求进行更改。

2.1. log4j2.properties

我们可以按照给定的方式在log4j.properties中配置滚动文件附加器。

  1. name = PropertiesConfig
  2. appender.rolling.type = RollingFile
  3. appender.rolling.name = RollingFile
  4. appender.rolling.fileName = ${LOG_DIR}/application.log
  5. appender.rolling.filePattern = ${LOG_DIR}/application.%d{dd-MMM}.log.gz
  6. appender.rolling.layout.type = PatternLayout
  7. appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
  8. appender.rolling.policies.type = Policies
  9. appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
  10. appender.rolling.policies.size.size=10MB
  11. appender.rolling.strategy.type = DefaultRolloverStrategy
  12. appender.rolling.strategy.max = 5
  13. logger.rolling.name = rollingFile
  14. logger.rolling.level = debug
  15. logger.rolling.additivity = false
  16. logger.rolling.appenderRef.rolling.ref = RollingFile

2.2 log4j2.xml

  1. <RollingFile
  2. name="rollingFile"
  3. fileName="${LOG_DIR}/application.log"
  4. filePattern="${LOG_DIR}/application.%i.log.gz"
  5. ignoreExceptions="false">
  6. <PatternLayout>
  7. <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
  8. </PatternLayout>
  9. <Policies>
  10. <SizeBasedTriggeringPolicy size="10MB" />
  11. </Policies>
  12. <DefaultRolloverStrategy max="5" />
  13. </RollingFile>

3. RollingFileAppender – 基于日期时间的滚动

我们也可以根据日期时间滚动日志文件。

3.1 RollingFileAppender示例

如果使用RollingFileAppender,则使用TimeBasedRollingPolicy来指定何时基于日期时间滚动日志文件。

注意FileNamePattern属性。 它定义了滚动文件的名称模式。 在给定的示例中,它将在日志文件名中使用date-month重命名滚动日志文件。

例如,模式'{MM-dd-yyyy-HH}'将每小时滚动日志文件。

我们还使用.gz扩展名,因此 log4j 将自动压缩日志文件

  1. <RollingFile
  2. name="rollingFile"
  3. fileName="${LOG_DIR}/application.log"
  4. filePattern="${LOG_DIR}/application.%d{dd-MMM}.log.gz"
  5. ignoreExceptions="false">
  6. <PatternLayout>
  7. <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
  8. </PatternLayout>
  9. <Policies>
  10. <TimeBasedTriggeringPolicy filePattern="${LOG_DIR}/application.%d{dd-MMM-hh}.log.gz" />
  11. </Policies>
  12. <DefaultRolloverStrategy max="5" />
  13. </RollingFile>

3.2 每日滚动日志示例

为了启用每日滚动,log4j2 没有DailyRollingFileAppender,这是较早的 log4j 中存在的。 要每天滚动日志,请在TimeBasedTriggeringPolicy中将时间间隔设置为 1。

  1. <RollingFile
  2. name="rollingFile"
  3. fileName="${LOG_DIR}/application.log"
  4. ignoreExceptions="false">
  5. <PatternLayout>
  6. <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
  7. </PatternLayout>
  8. <Policies>
  9. <TimeBasedTriggeringPolicy interval="1"/>
  10. </Policies>
  11. <DefaultRolloverStrategy max="5" />
  12. </RollingFile>

4. RollingFileAppender – 基于日志大小和日期时间的滚动

如果要同时基于文件大小和日期时间来滚动日志文件,则需要同时使用SizeBasedTriggeringPolicyTimeBasedRollingPolicy

在给定的示例中,附加器可以使用包含{dd-MMM}filePattern属性引用文件名模式和基于时间的滚动策略。 基于大小的滚动将发生在 10 MB。

  1. <RollingFile
  2. name="rollingFile"
  3. fileName="${LOG_DIR}/application.log"
  4. filePattern="${LOG_DIR}/application.%d{dd-MMM}.log.gz"
  5. ignoreExceptions="false">
  6. <PatternLayout>
  7. <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
  8. </PatternLayout>
  9. <Policies>
  10. <OnStartupTriggeringPolicy />
  11. <SizeBasedTriggeringPolicy size="10 MB" />
  12. <TimeBasedTriggeringPolicy />
  13. </Policies>
  14. <DefaultRolloverStrategy max="5" />
  15. </RollingFile>

学习愉快!

参考文献:

RollingFileAppender Java 文档