Spring Cloud Sleuth-获取当前的traceId吗?

时间:2019-08-09 09:26:32

标签: spring-boot spring-cloud-sleuth

我正在使用Sleuth,我想知道是否可以获取当前的traceId? 我不需要添加任何响应或任何东西。我只希望traceId用于在某些情况下提醒开发团队的电子邮件。

3 个答案:

答案 0 :(得分:0)

注入示踪剂bean并调用currentSpan()以获取当前范围。从那里可以获取跟踪ID。

答案 1 :(得分:0)

Ex

import brave.Span;
import brave.Tracer;

@Service
public class TraceService {

    Tracer tracer;

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

    public void printTraceId() {
        Span span = tracer.currentSpan();
        String traceId = span.context().traceIdString();
        System.out.println(traceId);
    }

}

答案 2 :(得分:0)

如果当前没有正在进行的跟踪,tracer.currentSpan() 将返回 null,因此 tracer.currentSpan().context() 将抛出 NPE。如果您不确定是否存在当前跟踪并且想要在不存在的情况下创建一个,您应该使用

var span = tracer.startScopedSpan("fancyTitle");
try {
    var traceId = span.context().traceIdString();
    // use traceId ...
} finally {
    span.finish(); // clean up after yourself
}

请注意,这将在现有跟踪中创建一个新的跨度,即始终生成一个新的 spanId