public ApolloAuditTracer tracer() {
    RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
    if (requestAttributes != null) {
      Object tracer = requestAttributes.getAttribute(ApolloAuditConstants.TRACER,
          RequestAttributes.SCOPE_REQUEST);
      if (tracer != null) {
        return ((ApolloAuditTracer) tracer);
      } else {
        ApolloAuditTracer newTracer = new ApolloAuditTracer(new ApolloAuditScopeManager(), operatorSupplier);
        setTracer(newTracer);
        return newTracer;
      }
    }
    return null;
  }
@Test
  public void testGetTracerInAnotherThreadButSameRequest() {
    ApolloAuditTracer mockTracer = Mockito.mock(ApolloAuditTracer.class);
    {
      Mockito.when(traceContext.tracer()).thenReturn(mockTracer);
    }
    CountDownLatch latch = new CountDownLatch(1);
    Executors.newSingleThreadExecutor().submit(() -> {
      ApolloAuditTracer tracer = traceContext.tracer();

      assertEquals(mockTracer, tracer);

      latch.countDown();
    });
  }