【发布时间】:2019-12-17 00:31:55
【问题描述】:
我正在使用 Sleuth,我想知道是否可以获取当前的 traceId? 我不需要添加任何响应或任何东西。我只想要在某些情况下提醒开发团队的电子邮件的 traceId。
【问题讨论】:
标签: spring-boot spring-cloud-sleuth
我正在使用 Sleuth,我想知道是否可以获取当前的 traceId? 我不需要添加任何响应或任何东西。我只想要在某些情况下提醒开发团队的电子邮件的 traceId。
【问题讨论】:
标签: spring-boot spring-cloud-sleuth
注入跟踪器 bean 并调用 currentSpan() 以获取当前跨度。从那里您可以获取跟踪 ID。
【讨论】:
前
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);
}
}
【讨论】:
如果当前没有正在进行的跟踪,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。
【讨论】: