Logback基于文件大小的日志滚动触发策略未按配置生效
Logback SizeBasedTriggeringPolicy 不按指定大小滚动的解决方法
针对FixedWindowRollingPolicy正常保留日志但SizeBasedTriggeringPolicy随机触发滚动的问题,可从以下几个方向排查解决:
明确maxFileSize的单位写法
建议将纯数字配置改为带单位的格式,避免字节数计算歧义,比如把5000000改为5MB:<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize> </triggeringPolicy>检查RollingFileAppender的完整配置
确保两个滚动策略正确嵌套在RollingFileAppender标签内,且指定当前日志文件路径(<file>标签),完整配置示例:<appender name="YOUR_APPENDER_NAME" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_FOLDER}/current.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${LOG_FOLDER}/old.log.%i</fileNamePattern> <minIndex>1</minIndex> <maxIndex>5</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize> </triggeringPolicy> <encoder> <Pattern>${FILE_PATTERN}</Pattern> </encoder> </appender>缺少
<file>标签会导致滚动逻辑异常,是常见的配置遗漏点。升级Logback版本
旧版本(如1.1.x及更早)的SizeBasedTriggeringPolicy存在大小计算bug,建议升级到最新稳定版(如1.2.12或更高),修复相关问题。排查日志内容特殊性
如果日志中存在超大内容(比如超长字符串、二进制数据),单次写入可能直接超出设定的文件大小,导致滚动触发时机看似随机。这种情况可拆分大日志输出,或调整maxFileSize到更合理的值。启用Logback内部调试日志
添加调试日志配置,查看滚动触发的具体判断过程:<logger name="ch.qos.logback.core.rolling" level="DEBUG"/>通过输出的调试信息,可定位SizeBasedTriggeringPolicy判断文件大小的具体逻辑,找到异常原因。
内容的提问来源于stack exchange,提问作者user1253229
相关产品推荐
相关产品推荐

