Logback配置FixedWindowRollingPolicy的maxIndex为300仅生成22个日志文件
问题根因
你遇到的是logback旧版本中FixedWindowRollingPolicy的硬编码限制问题:
- logback 1.2.x及更早版本中,
FixedWindowRollingPolicy内置了常量MAX_WINDOW_SIZE = 20,只要你配置的归档窗口大小(maxIndex - minIndex + 1)超过20,logback会自动裁剪maxIndex保证窗口大小不超过20 - 你配置了
minIndex=2,所以实际生效的归档文件索引范围是2~21,合计20个归档文件,加上当前正在写入的Test.log、以及滚动过渡时生成的Test.1.log,总文件数刚好是22,和你观察到的现象完全吻合。
解决方案
有三种可行的解决方法:
- 升级logback版本到1.3.0-alpha1及以上,该版本开始将
MAX_WINDOW_SIZE的上限调整到了1000,完全可以满足你设置maxIndex=300的需求 - 替换滚动策略为
SizeAndTimeBasedRollingPolicy,该策略没有maxIndex的硬编码上限,同时支持按时间和文件大小双重维度滚动,更灵活,配置示例如下:
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>/home/ec2-user/production/logs/Test.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>300</maxHistory> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy>
- 如果你必须使用当前版本的logback且要保留
FixedWindowRollingPolicy,可以自定义类继承FixedWindowRollingPolicy,重写setMaxIndex方法,跳过内置的上限校验逻辑,配置时替换成你自己的实现类即可。
内容的提问来源于stack exchange,提问作者Kuldeepsinh
相关产品推荐
相关产品推荐

