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

Logback 1.2.3中SizeAndTimeBasedRollingPolicy达5GB总容量时误删全部归档文件求助

解决Logback 1.2.3中SizeAndTimeBasedRollingPolicy触发totalSizeCap时删除所有归档的问题

你遇到的这个情况,其实是Logback 1.2.3版本里SizeAndTimeBasedRollingPolicy的一个典型bug——当totalSizeCap设置为maxFileSize的整数倍时,触发容量上限后会错误地删除所有归档文件,而非仅清理最旧的文件。

从你的配置来看:

  • maxFileSize=1GB
  • totalSizeCap=5GB,刚好是前者的5倍,这就是触发问题的核心原因。

临时修复方案

可以先试试这几个快速调整的方法:

  • 修改totalSizeCap为非整数倍值:比如把totalSizeCap改成5.1GB,避开和maxFileSize的整数倍关联,这样RollingPolicy应该能正确计算需要删除的旧文件,不会再全部清空归档。
  • 手动核对归档文件总大小:因为你的日志是压缩格式(.gz),Logback计算totalSizeCap时是基于压缩后的实际大小。你可以手动统计现有归档文件的总大小,确认是否真的达到了5GB阈值,避免因计算偏差导致误触发。

长期解决方案

  • 升级Logback版本:Logback 1.2.3是2017年的旧版本,后续的1.2.x稳定版(比如1.2.11及以上)修复了多个SizeAndTimeBasedRollingPolicy的逻辑bug,包括totalSizeCap的计算问题。升级到新版本能彻底解决这个问题。
  • 确认归档文件名格式:检查你的fileNamePattern是否正确,%d{yyyyMMdd}和%i的组合要能让Logback准确识别归档文件的时间顺序和索引,避免排序混乱导致错误删除。

你的配置参考

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${tivo.logpath}/${tivo.logfilename}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!-- Rollover everyday. If file exceeds 1GB within a day, then file is archived with index starting from 0 -->
        <fileNamePattern>${tivo.logpath}/${tivo.logfilename}-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
        <!-- Each file should be at most 1GB -->
        <maxFileSize>1GB</maxFileSize>
        <!-- Keep maximum 30 days worth of archive files, deleting older ones -->
        <maxHistory>30</maxHistory>
        <!-- Total size of all archived files is at most 5GB -->
        <totalSizeCap>5GB</totalSizeCap>
    </rollingPolicy>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="com.tivo.logging.logback.layout.JsonLayout">
            <env>${envId}</env>
            <datacenter>${dcId}</datacenter>
            <serverId>${serverId}</serverId>
            <build>${info.properties.buildChange}</build>
            <service>${tivo.appname}</service>
        </layout>
    </encoder>
</appender>

建议先尝试调整totalSizeCap的数值验证效果;如果问题依旧,升级Logback版本是更可靠的长期解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:06:18