# Log4j`RollingFileAppender`配置示例

> 原文： [https://howtodoinjava.com/log4j/log4j-rolling-file-appender/](https://howtodoinjava.com/log4j/log4j-rolling-file-appender/)

[Log4j](https://howtodoinjava.com/log4j/) `RollingFileAppender`是`OutputStreamAppender`，它按照有关何时发生滚动（备份）的已配置触发策略，将日志消息写入文件。 它还具有有关如何转换文件的已配置转换策略。

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

## 1\. Log4j Maven 依赖项

```java
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

```

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

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

#### 2.1\. `log4j.properties`

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

```java
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.File=${LOG_DIR}/application.log
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
log4j.appender.rollingFile.MaxFileSize=10MB
log4j.appender.rollingFile.MaxBackupIndex=5
log4j.appender.rollingFile.append=true

log4j.rootCategory=ALL, rollingFile

```

#### 2.2 `log4j.xml`

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

```

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

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

#### 3.1 `RollingFileAppender`示例

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

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

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

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

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

```

#### 3.2 `DailyRollingFileAppender`示例

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

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

```

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

如果要同时基于文件大小和日期时间来滚动日志文件，则需要同时使用`SizeBasedTriggeringPolicy`和`TimeBasedRollingPolicy`。

```java
<appender name="rollingFile" class="org.apache.log4j.rolling.RollingFileAppender">
    <rollingPolicy 
    	class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="ActiveFileName" value="${LOG_DIR}/application.log" />
        <param name="FileNamePattern" value="${LOG_DIR}/application.%d{dd-MMM}.log.gz" />
    </rollingPolicy>
    <triggeringPolicy
        class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
        <param name="MaxFileSize" value="10MB" />
    </triggeringPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n" />
    </layout>
</appender>

```

参考文献：

[Log4j `RollingFileAppender` Java 文档](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/RollingFileAppender.html)