SpringBoot 2.7.2集成Logback遇日志不打印及上下文错误求助
解决Logback报错“LOGBACK: No context given for net.logstash.logback.LogstashFormatter”及日志不输出问题
问题原因
- 编码器配置错误:使用
LogstashEncoder嵌套自定义patternprovider时,LogstashFormatter无法正确获取Logback上下文,导致初始化失败。 - 版本兼容问题:你使用的
logstash-logback-encoder 6.6与SpringBoot 2.7.2内置的Logback 1.2.11存在兼容性差异,加剧了上下文绑定异常。
解决方案
1. 升级logstash-logback-encoder依赖
在pom.xml中更新依赖版本至与SpringBoot 2.7.2兼容的7.x版本:
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.4</version> </dependency>
2. 替换编码器类型
将LogstashEncoder替换为PatternJsonEncoder(专门用于自定义JSON日志格式,可正确绑定Logback上下文),修改logback-spring.xml中FILE-ROLLING appender的编码器配置:
<appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${HOME_LOG}</file> <!-- 自动创建日志父目录 --> <append>true</append> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_ROOT_PATH}/logs/${APP_NAME}/archived/${APP_NAME}.%d{yyyy-MM-dd}.%i.json</fileNamePattern> <maxFileSize>10MB</maxFileSize> <totalSizeCap>2GB</totalSizeCap> <maxHistory>60</maxHistory> </rollingPolicy> <!-- 替换为PatternJsonEncoder --> <encoder class="net.logstash.logback.encoder.PatternJsonEncoder"> <pattern> { "timestamp": "%d{ISO8601}", "trace": "%X{traceId:-}", "span": "%X{spanId:-}", "level": "%level", "logger": "%logger", "thread": "%thread", "application": "${APP_NAME}", "message": "%msg" } </pattern> </encoder> </appender>
3. 验证配置完整性
确保application.yml中已正确配置日志相关属性:
spring: application: name: your-application-name log: root.path: ./logs
验证
重启应用后,检查日志目录是否生成JSON格式日志,同时控制台不再出现No context given的报错。
内容的提问来源于stack exchange,提问作者Ranjit Soni
相关产品推荐
相关产品推荐

