【问题标题】:Spring Cloud Sleuth- Get current traceId?Spring Cloud Sleuth - 获取当前的 traceId?
【发布时间】:2019-12-17 00:31:55
【问题描述】:

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

【问题讨论】:

    标签: spring-boot spring-cloud-sleuth


    【解决方案1】:

    注入跟踪器 bean 并调用 currentSpan() 以获取当前跨度。从那里您可以获取跟踪 ID。

    【讨论】:

      【解决方案2】:

      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);
          }
      
      }
      

      【讨论】:

        【解决方案3】:

        如果当前没有正在进行的跟踪,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

        【讨论】:

          猜你喜欢
          • 2021-09-26
          • 2017-05-04
          • 1970-01-01
          • 1970-01-01
          • 2021-07-28
          • 2023-03-17
          • 1970-01-01
          • 2020-08-08
          • 2021-09-06
          相关资源
          最近更新 更多