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

Spring Boot 3.2.4中Micrometer TraceId与SpanId无法打印问题

解决Micrometer Tracing日志中TraceId/SpanId为空的问题

针对你在Spring Boot 3.2.4中使用Micrometer Tracing替代Sleuth时,日志仅显示应用名、TraceId和SpanId为空的问题,以下是具体排查和解决步骤:

1. 确认依赖版本对齐

确保micrometer-tracing-bridge-otel和opentelemetry-exporter-zipkin的版本由Spring Boot的依赖管理(BOM)自动控制,不要手动指定版本。Spring Boot 3.2.x有对应的Micrometer和OpenTelemetry版本兼容要求,手动指定版本可能导致兼容性问题。

Maven依赖示例:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-exporter-zipkin</artifactId>
</dependency>

2. 修正日志MDC配置

检查application.properties中的日志格式配置,确保正确引用Micrometer Tracing注入MDC的键名:

logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{traceId:-},%X{spanId:-}] %logger{36} - %msg%n
management.tracing.mdc.enabled=true # 显式开启MDC关联,建议显式配置避免默认值变更

若使用W3C传播格式,需额外添加:

management.tracing.propagation.type=W3C

3. 确保采样策略生效

显式设置全采样概率,避免因采样率为0导致无TraceId生成:

management.tracing.sampling.probability=1.0

4. 验证自动配置是否激活

查看应用启动日志,确认以下自动配置类已被加载:

  • MicrometerTracingAutoConfiguration
  • OpenTelemetryTracingAutoConfiguration

如果未加载,检查是否存在@SpringBootApplication(exclude=...)禁用了相关自动配置,或依赖缺失导致自动配置未触发。

5. 手动触发Span创建(非Web场景)

你的服务是独立小型服务,若无Web请求(Servlet/Reactive)或未使用RestTemplate/WebClient,默认不会自动创建Span。对于内部方法调用、定时任务等场景,需手动创建Span:

import io.micrometer.tracing.Tracer;
import org.springframework.stereotype.Component;

@Component
public class YourService {
    private final Tracer tracer;

    public YourService(Tracer tracer) {
        this.tracer = tracer;
    }

    public void executeTask() {
        // 手动启动Span
        Tracer.Span span = tracer.startSpan("execute-task");
        try (Tracer.SpanInScope scope = tracer.withSpan(span)) {
            // 执行业务逻辑
            System.out.println("Task executed");
        } finally {
            // 结束Span
            span.end();
        }
    }
}

6. 检查OpenTelemetry exporter配置

确保OpenTelemetry exporter正确配置(不影响TraceId生成,但可验证链路完整性):

otel.traces.exporter=zipkin
otel.exporter.zipkin.endpoint=http://localhost:9411/api/v2/spans # 根据你的Zipkin地址调整

完成以上步骤后重启应用,日志中应能正常显示TraceId和SpanId。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:06:24