原文: https://howtodoinjava.com/log4j/log4j-rolling-file-appender/

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

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

1. Log4j Maven 依赖项

  1. <dependency>
  2. <groupId>log4j</groupId>
  3. <artifactId>log4j</artifactId>
  4. <version>1.2.17</version>
  5. </dependency>

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

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

2.1. log4j.properties

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

  1. log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
  2. log4j.appender.rollingFile.File=${LOG_DIR}/application.log
  3. log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
  5. log4j.appender.rollingFile.MaxFileSize=10MB
  6. log4j.appender.rollingFile.MaxBackupIndex=5
  7. log4j.appender.rollingFile.append=true
  8. log4j.rootCategory=ALL, rollingFile

2.2 log4j.xml

  1. <appender name="rollingFile" class="org.apache.log4j.RollingFileAppender">
  2. <param name="file" value="${LOG_DIR}/application.log" />
  3. <param name="MaxFileSize" value="10MB" />
  4. <param name="MaxBackupIndex" value="5" />
  5. <layout class="org.apache.log4j.PatternLayout">
  6. <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n" />
  7. </layout>
  8. </appender>

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

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

3.1 RollingFileAppender示例

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

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

例如,模式'{dd-MMM}'将在一个月的每天中滚动日志文件。 同样,'{MM-dd-yyyy-HH}'将每小时滚动一次。

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

  1. <appender name="rollingFile" class="org.apache.log4j.rolling.RollingFileAppender">
  2. <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
  3. <param name="FileNamePattern" value="${LOG_DIR}/application.%d{dd-MMM}.log.gz" />
  4. </rollingPolicy>
  5. <layout class="org.apache.log4j.PatternLayout">
  6. <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n" />
  7. </layout>
  8. </appender>

3.2 DailyRollingFileAppender示例

为了启用每日滚动,log4j 提供了DailyRollingFileAppender,它扩展了FileAppender。 如果要每天滚动日志文件,请直接使用它。

  1. <appender name="rollingFile" class="org.apache.log4j.rolling.DailyRollingFileAppender">
  2. <layout class="org.apache.log4j.PatternLayout">
  3. <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n" />
  4. </layout>
  5. </appender>

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

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

  1. <appender name="rollingFile" class="org.apache.log4j.rolling.RollingFileAppender">
  2. <rollingPolicy
  3. class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
  4. <param name="ActiveFileName" value="${LOG_DIR}/application.log" />
  5. <param name="FileNamePattern" value="${LOG_DIR}/application.%d{dd-MMM}.log.gz" />
  6. </rollingPolicy>
  7. <triggeringPolicy
  8. class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
  9. <param name="MaxFileSize" value="10MB" />
  10. </triggeringPolicy>
  11. <layout class="org.apache.log4j.PatternLayout">
  12. <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n" />
  13. </layout>
  14. </appender>

参考文献:

Log4j RollingFileAppender Java 文档