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 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 需搭配
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)快速验证滚动行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










