You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logback1.2.3中totalSizeCap搭配SizeAndTimeBasedRollingPolicy不生效问题

问题根因与修复方案

Logback 1.2.3版本中totalSizeCap未生效是配置缺失和版本已知特性共同导致的,具体原因和修复方法如下:

核心原因

  • SizeAndTimeBasedRollingPolicy要求fileNamePattern必须包含%i占位符(用于标记按大小拆分的日志分片序号),同时必须配置maxFileSize指定单文件大小阈值,缺少这两个配置时,日志归档统计逻辑无法正常识别所有归档文件,总大小计算错误导致totalSizeCap不生效
  • 当前配置中使用了%d{yyyy-MM, aux}作为二级目录存放历史日志,Logback 1.2.3的归档扫描逻辑存在嵌套目录遍历缺陷,统计总大小时会漏算子目录内的历史日志,导致总大小统计值远低于实际值,无法触发旧日志清理
  • 若${HISTORY_SIZE}参数未携带单位,默认单位为字节,很容易出现配置值远小于预期的情况,看起来像totalSizeCap未生效

修复方案

方案1:保留按时间+大小切分日志的逻辑

补充缺失的配置项即可,修正后的配置如下:

<springProfile name="prod">
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${HISTORY_LOCATION}/%d{yyyy-MM, aux}/log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 补充单日志文件最大大小配置,可根据需求调整 -->
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>${HISTORY_LENGTH}</maxHistory>
            <!-- 确保HISTORY_SIZE参数携带单位,例:10GB、500MB -->
            <totalSizeCap>${HISTORY_SIZE}</totalSizeCap>
        </rollingPolicy>
    </appender>
</springProfile>

方案2:不需要按大小拆分单天日志

如果只需要按天切分日志,同时限制总大小,可以更换为TimeBasedRollingPolicy,同时建议升级Logback版本到1.2.12及以上稳定版,修复嵌套目录扫描的已知缺陷。


内容的提问来源于stack exchange,提问作者Memija

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:03