在java日志记录中,配置日志文件保留天数主要取决于所使用的日志框架及其对应的滚动策略。以广泛使用的logback为例,可以通过设置 timebasedrollingpolicy 中的 maxhistory 属性来指定保留的历史日志文件数量,结合文件名模式中的时间单位(如天、月)即可实现按天数保留的效果;若使用log4j2,则需配置 defaultrolloverstrategy 中的 max 属性并配合 directwriteonclose 或异步appender以确保清理生效。

Logback中如何配置按天保留的日志文件
在Logback中,通过 rollingPolicy 和 triggeringPolicy 的配合可以实现基于时间的日志滚动与清理。核心在于 TimeBasedRollingPolicy 的 fileNamePattern 定义滚动周期,而 maxHistory 决定保留的文件数。例如,若 fileNamePattern 包含 %d{yyyy-MM-dd},则每天生成一个新文件,设置 maxHistory=30 即保留最近30天的日志。

<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>上述配置中,fileNamePattern 指定了日志文件按天滚动,maxHistory=30 表示保留最近30个历史文件(即30天),totalSizeCap 可选用于限制总大小。当旧日志被删除时,Logback会在每次滚动前执行清理操作。
立即学习“Java免费学习笔记(深入)”;
Log4j2中如何配置日志文件的保留策略
Log4j2 提供了更灵活的策略组合,通常使用 DefaultRolloverStrategy 配合 TimeBasedTriggeringPolicy 来实现按天滚动和保留天数控制。关键属性是 max,它定义了保留的最大文件数。如果文件名模式按天变化,max 的值即对应保留的天数。

<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>在该配置中,filePattern 包含 %d{yyyy-MM-dd} 确保每天生成新文件,TimeBasedTriggeringPolicy 触发每日滚动,DefaultRolloverStrategy 的 max="30" 表示保留最近30个匹配模式的文件。注意:若使用压缩(如 .gz),旧文件会被压缩后归档,清理逻辑同样适用。
配置maxHistory为0时会发生什么
当 maxHistory(Logback)或 max(Log4j2)设置为0时,系统不会保留任何历史日志文件,每次滚动后旧文件会立即被删除。这意味着除了当前正在写入的活动日志文件外,所有过往日志都将被清除,适用于只需实时查看日志、无需存档的场景。


















