🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Log4j2 `RollingFileAppender`示例 > 原文: [https://howtodoinjava.com/log4j2/log4j2-rollingfileappender-example/](https://howtodoinjava.com/log4j2/log4j2-rollingfileappender-example/) [Log4j2](https://howtodoinjava.com/log4j2/) `RollingFileAppender`是`OutputStreamAppender`,它按照有关何时应进行滚动(备份)的已配置触发策略,将日志消息写入文件。 它还具有有关如何转换文件的已配置转换策略。 通常,日志文件的备份是根据文件大小和/或当前日期创建的。 ## 1\. Log4j2 Maven 依赖项 ```java <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.11.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.1</version> </dependency> ``` 在 [maven 仓库](https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core)中检查最新版本。 ## 2\. Log4j2 `RollingFileAppender`示例 – 基于日志文件大小的滚动 此给定的配置根据日志文件大小滚动日志文件。 我已将日志文件大小配置为 10 MB。 根据您的要求进行更改。 #### 2.1\. `log4j2.properties` 我们可以按照给定的方式在`log4j.properties`中配置滚动文件附加器。 ```java name = PropertiesConfig appender.rolling.type = RollingFile appender.rolling.name = RollingFile appender.rolling.fileName = ${LOG_DIR}/application.log appender.rolling.filePattern = ${LOG_DIR}/application.%d{dd-MMM}.log.gz appender.rolling.layout.type = PatternLayout appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %m%n appender.rolling.policies.type = Policies appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size=10MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 5 logger.rolling.name = rollingFile logger.rolling.level = debug logger.rolling.additivity = false logger.rolling.appenderRef.rolling.ref = RollingFile ``` #### 2.2 `log4j2.xml` ```java <RollingFile name="rollingFile" fileName="${LOG_DIR}/application.log" filePattern="${LOG_DIR}/application.%i.log.gz" ignoreExceptions="false"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="10MB" /> </Policies> <DefaultRolloverStrategy max="5" /> </RollingFile> ``` ## 3\. `RollingFileAppender` – 基于日期时间的滚动 我们也可以根据日期时间滚动日志文件。 #### 3.1 `RollingFileAppender`示例 如果使用`RollingFileAppender`,则使用`TimeBasedRollingPolicy`来指定何时基于日期时间滚动日志文件。 注意`FileNamePattern`属性。 它定义了滚动文件的名称模式。 在给定的示例中,它将在日志文件名中使用`date-month`重命名滚动日志文件。 例如,模式`'{MM-dd-yyyy-HH}'`将每小时滚动日志文件。 我们还使用`.gz`扩展名,因此 log4j 将**自动压缩日志文件**。 ```java <RollingFile name="rollingFile" fileName="${LOG_DIR}/application.log" filePattern="${LOG_DIR}/application.%d{dd-MMM}.log.gz" ignoreExceptions="false"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy filePattern="${LOG_DIR}/application.%d{dd-MMM-hh}.log.gz" /> </Policies> <DefaultRolloverStrategy max="5" /> </RollingFile> ``` #### 3.2 每日滚动日志示例 为了启用每日滚动,log4j2 没有`DailyRollingFileAppender`,这是较早的 log4j 中存在的。 要每天滚动日志,请在`TimeBasedTriggeringPolicy`中将时间间隔设置为 1。 ```java <RollingFile name="rollingFile" fileName="${LOG_DIR}/application.log" ignoreExceptions="false"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="1"/> </Policies> <DefaultRolloverStrategy max="5" /> </RollingFile> ``` ## 4\. `RollingFileAppender` – 基于日志大小和日期时间的滚动 如果要同时基于文件大小和日期时间来滚动日志文件,则需要同时使用`SizeBasedTriggeringPolicy`和`TimeBasedRollingPolicy`。 在给定的示例中,附加器可以使用包含`{dd-MMM}`的`filePattern`属性引用文件名模式和基于时间的滚动策略。 基于大小的滚动将发生在 10 MB。 ```java <RollingFile name="rollingFile" fileName="${LOG_DIR}/application.log" filePattern="${LOG_DIR}/application.%d{dd-MMM}.log.gz" ignoreExceptions="false"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> <TimeBasedTriggeringPolicy /> </Policies> <DefaultRolloverStrategy max="5" /> </RollingFile> ``` 学习愉快! 参考文献: [`RollingFileAppender` Java 文档](https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender)