Logback的RollingFileAppender支持按时间、按大小及混合滚动策略:1.按天滚动用TimeBasedRollingPolicy,需配置fileNamePattern含%d;2.按大小滚动用SizeBasedTriggeringPolicy配合FixedWindowRollingPolicy;3.混合滚动推荐SizeAndTimeBasedRollingPolicy,fileNamePattern须同时含%d和%i,并设maxFileSize与maxHistory。

Logback 的 RollingFileAppender 支持按时间(如每天)和按文件大小两种主流切分策略,也可以组合使用。关键在于正确配置 rollingPolicy 和 triggeringPolicy。
按天滚动:TimeBasedRollingPolicy
这是最常用的方式,日志文件按日期归档,比如 app.log.2024-06-15、app.log.2024-06-16。
- 使用
TimeBasedRollingPolicy,必须指定fileNamePattern,其中日期占位符用%d{yyyy-MM-dd}格式 - 建议配合
maxHistory控制保留天数,避免磁盘被占满 -
file属性指向当前正在写入的活跃日志文件(如logs/app.log),它不会带日期后缀
示例配置:
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.log.%d{yyyy-MM-dd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>按大小滚动:SizeBasedTriggeringPolicy
当日志文件达到指定大小(如 100MB)时触发归档,生成 app.log.1、app.log.2 等序列文件。
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 需搭配
FixedWindowRollingPolicy或SizeAndTimeBasedFNATP(推荐后者用于混合策略) -
maxFileSize设置单个文件上限,单位支持 KB/MB/GB(如100MB) -
maxIndex控制保留的归档文件数量(仅FixedWindowRollingPolicy支持)
纯大小滚动示例(不推荐单独用,因无日期标识):
<appender name="SIZE_ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>logs/app.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>5</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>按天 + 按大小混合滚动(推荐)
兼顾可读性与容量控制:每天一个主文件,单日超限时自动切出 .1、.2 等子文件。
- 使用
SizeAndTimeBasedRollingPolicy(注意类名带SizeAndTimeBased) -
fileNamePattern中必须同时含日期占位符(%d)和索引占位符(%i),如app.log.%d{yyyy-MM-dd}.%i -
maxFileSize和maxHistory都要设置,前者控单文件大小,后者控保留多少天
示例:
<appender name="COMBO_ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/app.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>注意:totalSizeCap 是可选总容量上限,超出后会按 maxHistory 和文件年龄清理旧归档。
常见问题提醒
- 确保日志目录(如
logs/)存在且应用有写权限,否则启动失败或静默丢日志 -
fileNamePattern中的日期格式必须和file值一致,否则可能重复写或找不到活跃文件 - 修改配置后需重启应用(Logback 默认不热加载 rolling 策略变更)
- 测试时可用小数值(如
1KB)快速验证滚动行为

















