# 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)