【问题标题】:How to get trace id and span id in the log4j2, in the format [traceId, spanId ]?如何获取 log4j2 中的 trace id 和 span id,格式为 [traceId, spanId ]?
【发布时间】:2021-04-25 14:25:03
【问题描述】:

如何在 log4j2 中获取 trace id 和 span id,而不是在 [traceId, spanId ] 中?

预期输出: [APPNAME,5a59b2372d9a3814,5a59b2372d9a3814]

实际输出: [logLevel=ERROR] -- 2021-01-21 11:30:32,489 +0530 -- http-nio-8080-exec-1 com.springboot.test.aspect.MyAspect -- asnId= - message="记录键: ", traceId=f19556b82d98bf86, executionTimeSeconds=23

我的 log4j2:尝试在下面添加注释属性,但在日志中没有看到跟踪 ID


        <Property name="LOG_PATTERN">[logLevel=%-5p] -- %d %d{Z} -- %t %c -- asnId=%X{ASN} - %m%n</Property>
        <property name="log.level">${bundle:DEV:logLevel}</property>
         <!--  <property name="rolling.file.encoder.pattern"
              value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %-5level : loggerName=&quot;%logger{36}&quot; threadName=&quot;%thread&quot;  appName=&quot;${springAppName:-}&quot; trace=&quot;%X{X-B3-TraceId:-}&quot; span=&quot;%X{X-B3-SpanId:-}&quot; spanName=&quot;%X{X-Span-Name:-}&quot; parent=&quot;%X{X-B3-ParentSpanId:-}&quot; exportable=&quot;%X{X-Span-Export:-}&quot; pid=&quot;${PID:-}&quot; txnId=&quot;%X{txnId}&quot; %msg%n"/> -->
         <!--   <property name="PATTERN" value="%h %l %u [%date{dd/MMM/yyyy:HH:mm:ss.SSS}] &quot;%r&quot; %s %b &quot; &quot;%i{User-Agent}&quot; [trace=%responseHeader{X-B3-TraceId},span=%i{X-B3-SpanId}] %D"/> -->
    </Properties>

方面类:

在我的 Aspect 类的日志中,但是我可以看到跟踪 ID

public class MyAspect {

    private final static Logger logger = LogManager.getLogger(MyAspect.class);
    long startTime = new Date().getTime();
    
    @Autowired
    Tracer tracer;

      @Around("allControllerMethods() && args(..,@annotation(org.springframework...RequestBody) requestBody) ")
      public Object controllerEvents(ProceedingJoinPoint jp, Object requestBody) throws Throwable {
            
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
             HttpServletRequest request = attributes.getRequest();
             MethodSignature signature = (MethodSignature) jp.getSignature();
              Method method = signature.getMethod();
              Object resObject = jp.proceed();
         
              logger.error("traceId", tracer.currentSpan().context().traceIdString());

        }
    }

pom:

<dependency>
            <groupId>io.zipkin.brave</groupId>
            <artifactId>brave</artifactId>
            <version>5.12.6</version>
        </dependency> 
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency> 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>1.4.2.RELEASE</version>
        </dependency>

配置处理程序:

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

请在我没有使用 log4j 的测试项目中看到它按预期出现。

【问题讨论】:

    标签: java spring spring-boot trace spring-cloud-sleuth


    【解决方案1】:

    通过进行以下更改,我能够获得 traceId 和 spanId : 1)添加到log4j

      <Property name="LOG_PATTERN">[logLevel=%-5p]-- [%X{traceId}/%X{spanId}] -- %d %d{Z} -- %t %c - %m%n</Property>
    

    2)添加属性:

    request.logging.shouldLog=true
    

    3)添加

        @Value("${request.logging.shouldLog}")
        private boolean shouldLog;
        
    //    @Override
        protected boolean shouldLog(HttpServletRequest request) {
            return shouldLog;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2022-10-05
      • 2021-08-31
      • 2019-07-08
      • 2021-04-17
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多