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

Spring Boot 2.2.6中SizeAndTimeBasedRollingPolicy无上下文问题排查

解决Spring Boot 2.2.6日志配置的两个问题

咱们一步步拆解你遇到的问题:

1. 为什么直接用application.properties会报"No context given"错误?

这个报错本质是Logback的SizeAndTimeBasedRollingPolicy没有正确关联到LoggerContext。Spring Boot默认的日志配置其实能处理这个逻辑,但在2.2.6版本里,直接通过logging.file.*系列属性配置滚动策略时,偶尔会出现上下文绑定的小问题——简单说就是滚动策略找不到日志上下文对象,导致初始化失败。

2. 为什么加了空的logback-spring.xml后不报错,但配置被忽略?

当你自定义了logback-spring.xml,Spring Boot就会放弃它默认的自动日志配置逻辑,转而使用你提供的配置文件。而你只引入了defaults.xml,这个文件仅仅包含基础的日志格式、级别等默认设置,完全没有处理logging.file.name、max-size这些文件滚动相关的属性绑定逻辑,所以你的application.properties配置自然就被忽略了。

正确的解决方法

要让application.properties里的日志配置生效,同时解决上下文报错,你需要在自定义的logback-spring.xml中引入Spring Boot提供的完整基础配置,而不只是defaults.xml。修改后的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 引入基础默认配置(日志格式、级别等) -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <!-- 引入Spring Boot的核心日志基础配置,包含对logging.*属性的处理逻辑 -->
    <include resource="org/springframework/boot/logging/logback/base.xml" />
</configuration>

原理是什么?

base.xml里已经帮你实现了:

  • 自动读取application.properties中的logging.file.*、logging.path等属性
  • 正确初始化SizeAndTimeBasedRollingPolicy并绑定LoggerContext,解决上下文缺失的报错
  • 按照你配置的文件大小、历史天数、总容量等规则生成滚动日志

如果之后你需要自定义日志格式或者扩展其他配置,直接在这个xml里追加即可,不会影响原有properties配置的生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 06:37:49