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

同时使用两种Logback滚动策略导致Spring Boot启动失败

解决方案

你的配置逻辑有误,SizeAndTimeBasedRollingPolicy本身就是TimeBasedRollingPolicy的子类,它原生支持按时间+文件大小双维度滚动日志,不需要嵌套在TimeBasedRollingPolicy里作为触发策略使用。这种嵌套写法会导致Logback初始化时无法正确读取fileNamePattern参数,从而抛出异常。

正确的配置方式是直接将rollingPolicy的类指定为SizeAndTimeBasedRollingPolicy,同时注意修改fileNamePattern,添加%i占位符来区分同一天内生成的多个按大小分割的日志文件(比如同天内文件超过10MB时,会生成access-2024-10-01.0.log、access-2024-10-01.1.log这类文件)。

完整的logback-access.xml配置如下:

<configuration>
  <appender name="ACCESS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 活跃日志文件路径 -->
    <file>logs/access.log</file>

    <!-- 直接使用SizeAndTimeBasedRollingPolicy实现双维度滚动 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- 文件名模板,%i用于区分同天内的多份日志 -->
      <fileNamePattern>logs/access-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <!-- 日志保留天数 -->
      <maxHistory>30</maxHistory>
      <!-- 单文件最大容量 -->
      <maxFileSize>10MB</maxFileSize>
      <!-- 可选:设置总日志文件的最大容量,超过后会删除旧日志 -->
      <!-- <totalSizeCap>1GB</totalSizeCap> -->
    </rollingPolicy>

    <!-- 访问日志格式编码器 -->
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.access.PatternLayout">
        <pattern>%h %l %u [%t] "%r" %s %b %D %I</pattern>
      </layout>
    </encoder>
  </appender>

  <appender-ref ref="ACCESS_FILE" />
</configuration>

关键说明

  • 移除了嵌套的timeBasedFileNamingAndTriggeringPolicy节点,直接用SizeAndTimeBasedRollingPolicy作为滚动策略
  • fileNamePattern必须添加%i,否则同天内按大小分割的日志会覆盖之前的文件
  • 可选配置totalSizeCap可以限制所有归档日志的总大小,避免磁盘被占满

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:46:09