当前位置: 首页 > 知识库问答 >
问题:

如何在log4j2中以[traceId,spanId]格式获取跟踪id和span id?

漆雕伟志
2023-03-14

如何在log4j2中获取跟踪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

My 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的测试项目中,它的出现符合预期。

共有1个答案

栾景胜
2023-03-14

我可以通过以下更改获得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;
    }
 类似资料:
  • 我已经开始学习Sleuth,但是我还停留在日志配置上。 我有这样的配置: 但是当我检查文件时,我缺少跟踪 Id 和 spanId。下面是示例: 这是pom.xml的片段 不知道如何在这里继续,我一直在阅读文档和堆栈溢出帖子,但仍然找不到任何答案。 提前致谢。

  • TraceId 生成规则 SOFATracer 通过 TraceId 来将一个请求在各个服务器上的调用日志串联起来,TraceId 一般由接收请求经过的第一个服务器产生,产生规则是: 服务器 IP + 产生 ID 时候的时间 + 自增序列 + 当前进程号 ,比如: 0ad1348f1403169275002100356696 前 8 位 0ad1348f 即产生 TraceId 的机器的 IP,

  • 我们正在考虑利用spring cloud sleuth进行分布式跟踪,并且我们已经开发了一个PoC。这似乎是一个很好的解决方案,开箱即用。 但我有一个后续问题: 我们使用随机UUID和64位ID作为跟踪ID。我们知道自定义头(例如,一个新的跟踪Id)可以与sleuth头一起添加,但是否可以覆盖slueth的默认跟踪Id格式?我们已经查看了文档,也许传播是我们要走的路。有谁做了这一点,可以指出我们在

  • 我正在使用面向微服务的架构进行开发并想要跟踪。我在谷歌上搜索,发现istio具有扩展的标头: x请求ID x-b3-traceid x-b3-spanid x-b3-父spanid x-b3-采样 x-b3-标志 x-ot-span-上下文 我主要想知道和之间的区别,但如果有人可以共享其他人的标头,那就可以了

  • 例如,在包括Spring Cloud Sleuth之前,人们会在他们的日志中得到这样的东西 在应用程序名称附近有2个逗号(即traceID和spanID将显示的位置)。但我的日志最初看起来像这样 为了在日志中获取应用程序名称,我在application.properties中编写了以下代码 现在,我的日志看起来是这样的(如果您观察到,它在应用程序名称旁边没有2个逗号) 即使包括了Sleuth,我的

  • SLF4J 提供了 MDC (Mapped Diagnostic Contexts)功能,可以支持用户定义和修改日志的输出格式以及内容。本文将介绍 SOFATracer 集成的 SLF4J MDC功能,方便用户在只简单修改日志配置文件的前提下输出当前 SOFATracer 上下文 TraceId 以及 SpanId 。 使用前提 为了在应用中的日志正确打印 TraceId 和 SpanId 参数,