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

Spring Boot控制台日志不显示Trace/Span ID但Grafana可见的问题排查

解决控制台日志不显示trace_id/span_id的问题

你的核心问题是OpenTelemetry默认未自动将trace和span ID注入MDC(Mapped Diagnostic Context),所以即使配置了日志pattern,也无法读取到对应值。以下是具体解决步骤:

1. 开启OpenTelemetry的MDC自动注入

在application.properties中添加关键配置,强制OpenTelemetry把trace/span信息写入MDC:

otel.instrumentation.common.mdc.enabled=true
otel.instrumentation.common.mdc.legacy.keys=false
  • otel.instrumentation.common.mdc.enabled=true:开启MDC注入功能,这是解决问题的核心配置
  • otel.instrumentation.common.mdc.legacy.keys=false:确保使用标准的trace_id和span_id键名,避免与旧版本的键名冲突

2. 确认日志框架的MDC引用正确

如果你用Spring Boot默认的Logback,现有logging.pattern.level配置是有效的,但要确保没有自定义日志配置(比如logback-spring.xml)覆盖它。如果是自定义Logback配置,需在pattern中明确引用MDC变量:

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] trace_id=%X{trace_id} span_id=%X{span_id} %-5level %logger{36} - %msg%n</pattern>

3. 验证依赖版本兼容性

Spring Boot 3.4.0需要搭配兼容的OpenTelemetry Spring Starter版本,建议使用最新稳定版(如1.36.0及以上),避免版本不匹配导致的功能失效。Maven依赖示例:

<dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-spring-boot-starter</artifactId>
    <version>1.36.0</version>
</dependency>

4. 排除自定义逻辑干扰

如果项目中有自定义的Trace拦截器或上下文传递代码,检查是否存在手动清空MDC、未正确传递OpenTelemetry上下文的情况,这类代码会覆盖默认的MDC注入逻辑。

5. 快速验证MDC注入状态

可以添加一个测试接口,手动打印MDC中的值,确认注入是否生效:

@GetMapping("/trace-test")
public String traceTest() {
    System.out.println("trace_id: " + MDC.get("trace_id"));
    System.out.println("span_id: " + MDC.get("span_id"));
    return "trace test completed";
}
  • 如果能打印出有效ID,说明MDC注入正常,问题出在日志配置
  • 如果打印null,说明OpenTelemetry的MDC注入未生效,需要重新检查配置和依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:33:17