为什么需要自动删除日志?
在 Java 应用中,Logback 是广泛使用的日志框架。若不加以控制,日志文件会持续增长,最终导致磁盘空间耗尽,影响系统稳定性。
通过合理配置 RollingFileAppender 和 CleanHistoryOnStart 等策略,可实现日志的自动滚动与过期删除。
基于时间与大小的日志滚动配置
以下是一个典型的 logback-spring.xml 配置示例,支持按天滚动并保留最近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}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<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>
关键参数说明
- maxHistory:保留日志文件的最大天数(或周期数),超出部分自动删除。
- totalSizeCap:所有归档日志的总大小上限,超过后删除最旧文件。
- cleanHistoryOnStart:应用启动时是否立即清理过期日志(建议设为 true)。
- SizeAndTimeBasedTriggeringPolicy:当日志文件超过指定大小(如100MB)且到达新日期时,触发滚动。
注意事项
- 确保日志目录有写权限。
- totalSizeCap 需配合 maxHistory 使用才生效。
- 生产环境建议定期监控日志目录大小,防止配置失效导致磁盘爆满。