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

Logback 1.1.11中totalSizeCap不生效问题排查求助

你的Logback totalSizeCap不生效?大概率是配置细节没到位!

首先给你吃个定心丸:Logback 1.1.7确实有totalSizeCap配合aux日期模式时失效的bug,但1.1.11版本已经把这个问题修复了,所以基本可以排除版本bug的锅,大概率是你的配置有疏漏。我帮你梳理几个最容易踩坑的点:

1. 先确认totalSizeCap放对地方了吗?

这个参数必须直接嵌套在SizeAndTimeBasedRollingPolicy节点里,绝对不能放在RollingFileAppender或者其他节点下。举个正确的例子:

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  <!-- 这里放fileNamePattern、maxFileSize这些配置 -->
  <totalSizeCap>5GB</totalSizeCap> <!-- 就该在这儿! -->
</rollingPolicy>

要是你把它放在外面,Logback根本不会识别这个参数,自然不会生效。

2. 检查fileNamePattern的格式是否正确

你用了%d{yyyy-MM, aux}按月份归档文件夹,那fileNamePattern得和这个模式匹配才行,而且必须带上%i来区分同一时间段内超过大小限制的分割文件。比如正确的写法应该是:

<fileNamePattern>${LOG_ARCHIVE}/rollingfile.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

这里的%d{yyyy-MM-dd}是日志文件的命名粒度(按天分割),%i是用来标记同一日内超过maxFileSize的第N个文件。要是少了%i,SizeAndTimeBasedRollingPolicy根本没法准确计算总日志大小,totalSizeCap自然也不会触发清理。

3. 要不要开启cleanHistoryOnStart?

默认情况下,totalSizeCap的清理动作是在日志滚动的时候触发的。如果你的应用长时间运行没触发滚动(比如一直没写满单个日志文件),那历史日志就不会被清理。可以加个这个配置:

<cleanHistoryOnStart>true</cleanHistoryOnStart>

这样每次应用启动时,Logback都会主动检查总日志大小,超过上限就会自动删旧日志。

4. 确认日志路径变量解析正确了吗?

得确保${LOG_PATH}已经被正确解析成了实际的文件系统路径,不然Logback找不到归档文件夹,根本没法计算总大小。你可以看一下应用启动时的Logback日志,找有没有类似Setting property [LOG_PATH] to [你的实际路径]的记录,确认路径是对的。

5. 最后再确认下依赖版本

虽然1.1.11应该修复了bug,但也有可能你的依赖被其他库降级到1.1.7了(比如Maven/Gradle的依赖冲突)。你可以查一下项目的依赖树,确认实际引入的Logback版本确实是1.1.11。另外,也可以手动触发一次日志滚动(比如改一下当前日志文件的名字),然后看日志里有没有Deleting old log file [...] because total size cap [...] has been exceeded的记录,要是有就说明功能正常,只是之前没触发清理。

最后给你一个完整的参考配置,你可以对比着调整自己的配置:

<property name="LOG_PATH" value="./logs"/>
<property name="LOG_ARCHIVE" value="${LOG_PATH}/%d{yyyy-MM, aux}"/>

<appender name="RollingFile-Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${LOG_PATH}/rollingfile.log</file>
  <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_ARCHIVE}/rollingfile.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <maxFileSize>100MB</maxFileSize> <!-- 单个日志文件的大小上限 -->
    <maxHistory>30</maxHistory> <!-- 保留最近30天的日志 -->
    <totalSizeCap>5GB</totalSizeCap> <!-- 所有归档日志的总大小上限 -->
    <cleanHistoryOnStart>true</cleanHistoryOnStart>
  </rollingPolicy>
</appender>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:19:51