Spring Cloud Sleuth - 获取当前的 traceId?
Spring Cloud Sleuth- Get current traceId?
我正在使用 Sleuth,我想知道是否可以获取当前的 traceId?
我不需要添加任何响应或任何内容。我只想要在某些情况下提醒开发团队的电子邮件的 traceId。
注入Tracer
bean并调用tracer.currentSpan()
获取当前span。从那里您可以获得跟踪 ID。
请使用 Sleuth 的 API - 这样无论您使用哪个 Tracer 库(Brave / OTel),您的代码都将保持不变。
示例:
import org.springframework.cloud.sleuth.Span;
import org.springframework.cloud.sleuth.Tracer;
@Component
public class TraceService {
private final Tracer tracer;
public TraceService(Tracer tracer) {
this.tracer = tracer;
}
public String traceId() {
Span span = tracer.currentSpan();
String traceId = span.context().traceId();
System.out.println(traceId);
return traceId;
}
}
例
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()
将 return null
因此 tracer.currentSpan().context()
将抛出 NPE。如果您不确定是否存在当前跟踪并希望在 none 确实存在的情况下创建一个,您应该使用
var span = tracer.startScopedSpan("fancyTitle");
try {
var traceId = span.context().traceIdString();
// use traceId ...
} finally {
span.finish(); // clean up after yourself
}
请注意,这将在现有跟踪中创建一个新的跨度,即始终生成一个新的 spanId
。
我正在使用 Sleuth,我想知道是否可以获取当前的 traceId? 我不需要添加任何响应或任何内容。我只想要在某些情况下提醒开发团队的电子邮件的 traceId。
注入Tracer
bean并调用tracer.currentSpan()
获取当前span。从那里您可以获得跟踪 ID。
请使用 Sleuth 的 API - 这样无论您使用哪个 Tracer 库(Brave / OTel),您的代码都将保持不变。
示例:
import org.springframework.cloud.sleuth.Span;
import org.springframework.cloud.sleuth.Tracer;
@Component
public class TraceService {
private final Tracer tracer;
public TraceService(Tracer tracer) {
this.tracer = tracer;
}
public String traceId() {
Span span = tracer.currentSpan();
String traceId = span.context().traceId();
System.out.println(traceId);
return traceId;
}
}
例
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()
将 return null
因此 tracer.currentSpan().context()
将抛出 NPE。如果您不确定是否存在当前跟踪并希望在 none 确实存在的情况下创建一个,您应该使用
var span = tracer.startScopedSpan("fancyTitle");
try {
var traceId = span.context().traceIdString();
// use traceId ...
} finally {
span.finish(); // clean up after yourself
}
请注意,这将在现有跟踪中创建一个新的跨度,即始终生成一个新的 spanId
。