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

Spring Boot控制台Trace日志为空且启动失败问题求助

解决Spring Boot OpenTelemetry Trace上下文缺失及依赖错误的步骤

1. 补全OpenTelemetry核心依赖

你当前仅添加了Logback的Instrumentation依赖,缺少Spring Boot自动配置及OpenTelemetry核心组件依赖,这是otelRestTemplateBeanPostProcessor依赖缺失的核心原因。需补充以下与现有版本(0.16.1)匹配的依赖:

implementation 'io.opentelemetry.instrumentation:opentelemetry-spring-boot-autoconfigure:0.16.1'
implementation 'io.opentelemetry:opentelemetry-api:0.16.1'
implementation 'io.opentelemetry:opentelemetry-sdk:0.16.1'

2. 修正Logback配置

  • 你的根日志直接绑定STDOUT Appender,未经过OTEL Appender处理,导致日志无法获取Trace上下文。需修改根日志的Appender引用:
<root>
    <level value="INFO" />
    <appender-ref ref="OTEL" />
</root>
  • 部分OpenTelemetry版本中,MDC上下文的键名为traceId和spanId而非trace_id/span_id,可同步调整日志格式:
<pattern><![CDATA[%date{HH:mm:ss.SSS} [%thread] %-5level %logger{15}#%line %X{req.requestURI} traceId: %X{traceId} spanId: %X{spanId} %msg
]]></pattern>

3. 手动初始化OpenTelemetry核心Bean(可选,自动配置失效时使用)

若自动配置未生效,可手动创建核心Bean确保Trace上下文初始化:

import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenTelemetryConfig {

    @Bean
    public OpenTelemetry openTelemetry(SdkTracerProvider sdkTracerProvider) {
        return OpenTelemetrySdk.builder()
                .setTracerProvider(sdkTracerProvider)
                .buildAndRegisterGlobal();
    }

    @Bean
    public SdkTracerProvider sdkTracerProvider(SpanExporter spanExporter) {
        return SdkTracerProvider.builder()
                .addSpanProcessor(SimpleSpanProcessor.create(spanExporter))
                .build();
    }

    @Bean
    public SpanExporter spanExporter() {
        return SpanExporter.composite();
    }

    @Bean
    public Tracer tracer(OpenTelemetry openTelemetry) {
        return openTelemetry.getTracer("your-service-name");
    }
}

4. 验证Web请求的Trace上下文

在Controller中通过注解或手动创建Span,确保Trace上下文能正确传递:

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    private final Tracer tracer;

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

    @GetMapping("/test")
    public String test() {
        Span span = tracer.spanBuilder("test-endpoint").startSpan();
        try (var scope = span.makeCurrent()) {
            // 业务逻辑代码
            return "ok";
        } finally {
            span.end();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:05:24