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

SpringBoot集成Logback配置maxHistory后不删除过期旧日志问题

日志不自动清理的核心原因

你当前的配置是Logback 1.1.x版本的旧写法,在1.2.x及以上版本中ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP类已被废弃,该类在高版本下存在maxHistory逻辑不生效的bug,是导致旧日志无法删除的主要原因。除此之外还有几个常见的影响因素:

  • Logback核心包(logback-core、logback-classic)与slf4j-api版本不兼容,导致清理逻辑未执行
  • 应用运行身份对归档日志目录没有删除权限,清理操作被系统拦截
  • ${LOGS}变量解析路径和实际归档日志输出路径不匹配,Logback无法匹配到要清理的文件

修复方案

  1. 版本校验:确保logback-core、logback-classic、slf4j-api三者版本互相兼容,同大版本下的小版本号尽量保持一致
  2. 替换旧版滚动策略为1.2.x之后官方推荐的SizeAndTimeBasedRollingPolicy,无需单独配置triggeringPolicy,正确配置示例如下:
<appender name="app" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS}/app.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.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${LOGS}/archived/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <!-- 单日志文件大小上限 -->
        <maxFileSize>10MB</maxFileSize>
        <!-- 日志保留天数,由fileNamePattern中%d的精度决定,此处按天保留10天 -->
        <maxHistory>10</maxHistory>
        <!-- 启动时清理超过保留期的日志 -->
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
        <!-- 可选配置:所有归档日志总大小上限,超过时自动删除最旧的日志 -->
        <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
</appender>
  1. 权限校验:确认应用运行的用户对${LOGS}/archived目录有读、写、删除文件的权限
  2. 路径校验:确认归档日志实际输出路径和fileNamePattern定义的路径完全匹配,文件名规则和配置一致

内容的提问来源于stack exchange,提问作者BärenHund1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:54:02