Log4j2的RollingFile appender是常用的日志滚动输出组件,通过合理配置其策略参数,就可以实现仅保留最近4天日志的需求,避免历史日志无限制堆积占用磁盘空间。

核心配置思路
要实现仅保留最近4天的日志,核心是使用TimeBasedTriggeringPolicy作为触发策略,配合DefaultRolloverStrategy的max参数控制保留的日志文件数量。时间滚动的粒度需要和保留天数匹配,确保max值对应4天的日志文件总数。
基础配置示例
以下是按天滚动、仅保留最近4天日志的完整Log4j2配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}.log">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<!-- 按天触发滚动 -->
<TimeBasedTriggeringPolicy interval="1"/>
<!-- 保留最近4个日志文件,对应4天 -->
<DefaultRolloverStrategy max="4"/>
</RollingFile>
<Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
<Loggers>
</Configuration>
配置参数说明
filePattern参数
该参数定义滚动后的日志文件命名规则,其中%d{yyyy-MM-dd}表示按天生成时间后缀,如果改成%d{yyyy-MM-dd-HH}则表示按小时滚动,此时max值需要对应4天的总小时数。
TimeBasedTriggeringPolicy
interval属性表示滚动的时间间隔,和filePattern中的时间单位一致,设置为1表示每间隔1个时间单位触发一次滚动。比如按天滚动时interval为1,按小时滚动时interval也为1。
DefaultRolloverStrategy
max属性表示最多保留的滚动日志文件数量,当滚动生成的日志文件超过该值时,最旧的日志文件会被自动删除。这里按天滚动时,设置为4就正好保留最近4天的日志。
组合滚动场景配置
如果同时需要按大小和按时间滚动,可以搭配SizeBasedTriggeringPolicy,配置示例如下:
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
<Policies>
<!-- 按天滚动 -->
<TimeBasedTriggeringPolicy interval="1"/>
<!-- 单个文件超过100MB时滚动 -->
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<!-- 每个时间单位内最多保留4个文件,整体保留最近4天的所有文件 -->
<DefaultRolloverStrategy max="4"/>
</RollingFile>
这里filePattern增加了%i作为同一时间单位内的文件序号,当单个日志文件达到100MB时会生成新的序号文件,max控制每个时间单位内最多保留4个文件,整体保留最近4天的所有日志文件。
常见问题排查
- 如果日志没有按预期删除,首先检查
filePattern的时间格式是否和TimeBasedTriggeringPolicy的间隔匹配,不匹配会导致滚动逻辑异常。 - 确认
DefaultRolloverStrategy的max值是否设置正确,不要漏写该参数,默认情况下可能会保留更多日志文件。 - 如果使用了自定义的删除策略,需要检查
Delete标签的配置是否正确,避免和默认的滚动策略冲突。
Log4j2RollingFile日志保留策略日志滚动修改时间:2026-06-15 10:21:25