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

Spring Boot中Logback滚动旧日志文件被截断问题咨询

Logback滚动日志旧文件被清零的原因分析

场景与问题

在Spring Boot应用中使用以下Logback配置后,发现2月8日至12日的日志文件在2月13日被清零,2月13日的日志文件仅包含当日内容,未合并被清零日期的日志。

日志配置

<appender name="IbkrRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS}/ibkr.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOGS}/ibkr-%d{yyyy-MM-dd}.%i.log
      </fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
</appender>
<!-- LOG everything at INFO level -->
<root level="info">
    <appender-ref ref="IbkrRollingFile" />
</root>

日志文件列表

9381 Jan 26 23:45 ibkr-2023-01-26.0.log
  17393 Jan 27 23:45 ibkr-2023-01-27.0.log
  75651 Jan 30 23:45 ibkr-2023-01-30.0.log
 175709 Jan 31 23:45 ibkr-2023-01-31.0.log
 194281 Feb  1 23:45 ibkr-2023-02-01.0.log
 267280 Feb  2 23:52 ibkr-2023-02-02.0.log
 245753 Feb  3 23:34 ibkr-2023-02-03.0.log
    118 Feb  4 04:30 ibkr-2023-02-04.0.log
 386926 Feb  6 21:58 ibkr-2023-02-06.0.log
 415111 Feb  7 23:53 ibkr-2023-02-07.0.log
   4300 Feb  9 10:12 pom.xml
      0 Feb 13 20:40 ibkr-2023-02-12.0.log
      0 Feb 13 20:40 ibkr-2023-02-08.0.log
      0 Feb 13 20:40 ibkr-2023-02-11.0.log
      0 Feb 13 20:40 ibkr-2023-02-10.0.log
      0 Feb 13 20:40 ibkr-2023-02-09.0.log
 468100 Feb 13 23:00 ibkr-2023-02-13.0.log
  15380 Feb 14 12:20 ibkr.log

原因分析

  1. 应用重启触发异常滚动:2月13日应用发生了重启,重启前ibkr.log中累积了2月8日至12日的日志(从文件列表看这几天没有生成对应日期的滚动日志,说明期间日志一直写入主文件ibkr.log,未触发滚动)。重启时Logback会尝试处理主文件中的历史日志,将其拆分到对应日期的文件中。
  2. 文件名模板格式错误:配置中<fileNamePattern>标签内的内容末尾带有多余换行,导致Logback解析文件名模板时出现异常,无法正确将历史日志写入对应日期的文件,反而生成了空文件。
  3. 跨天日志拆分逻辑失败:使用SizeAndTimeBasedFNATP时,若主文件中包含多天的日志,Logback需要按日志时间戳拆分到对应日期文件。如果期间日志时间戳解析异常、磁盘权限不足或空间不足,会导致拆分失败,仅保留当日日志到新文件,旧日志丢失,同时生成空的历史日期文件。

修复建议

  • 修正文件名模板:移除<fileNamePattern>内的多余换行,确保模板完整:
    <fileNamePattern>${LOGS}/ibkr-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    
  • 添加日志保留天数限制:在TimeBasedRollingPolicy中添加maxHistory配置,避免累积过多历史日志:
    <maxHistory>30</maxHistory>
    
  • 确保目录权限:保证应用运行用户对日志目录拥有完整的读写权限,避免文件操作失败。
  • 控制启动时历史日志清理:可添加cleanHistoryOnStart配置(默认false),明确启动时是否清理历史日志,避免误操作:
    <cleanHistoryOnStart>false</cleanHistoryOnStart>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:05:23