小编vic*_*cky的帖子

在尝试获取 Sleuth 的跟踪时,应用程序失败,并显示“需要一个‘brave.Tracer’类型的 bean,但无法找到”

我从另一个微服务调用我的 Springboot 应用程序来获取跟踪和跨度 ID,但在启动应用程序时出现错误。我想要做的是在app1中创建Trace & Span,然后调用app2并在app2中获取从app1传递的Trace id。在 app1 中,我能够获取跟踪和跨度,但在 app2 中,我想获取该跟踪,但它失败了。我曾尝试参考这一点

我得到的错误是:

描述:

com.test.demo1.filter.MyFilter 中构造函数的参数 0 需要一个类型为“brave.Tracer”的 bean,但无法找到。

行动:

考虑在您的配置中定义一个“brave.Tracer”类型的 bean。”我也尝试创建该 bean,但给出错误“构造函数 Tracer() 未定义”

下面是我的简单 RestController 和 pom.xml

package com.test.demo1.controller;

import java.util.logging.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import brave.Tracer;


@RestController
@Component
public class Greeting {

private static final Logger logger = Logger.getLogger(Greeting.class.getName());
    
    @Autowired
    Tracer tracer;

    @RequestMapping("/greeting")
    public String greeting() {
        logger.info("Hello info from from spring sleuth");
        logger.info("tracer is -----> "+tracer.currentSpan().context().traceIdString());
        System.out.println("tracer-id :"+ tracer.currentSpan().context().traceIdString());
        return "Hello"; …
Run Code Online (Sandbox Code Playgroud)

java spring trace spring-boot spring-cloud-sleuth

5
推荐指数
1
解决办法
1万
查看次数

如何在Spring过滤器中获取请求体参数?

我想通过Spring过滤器aspect记录HTTP请求中的请求参数。我尝试了不同的方法,但要么请求参数被调用null,要么方法未被调用。

我正在使用 Postman,这是一个POST请求。


示例请求网址:

http://localhost:8080/AvailableData

请求正文示例:

{
    "keyUserAgent": "CFNetwork/1209 Darwin/20.2.0",
    "locale": "en_US",
    "eid": "8904977033",
    "sessionId": "VGA-G20201030-776878787-1AD5-11EB-895C-H78789GJJH"
}
Run Code Online (Sandbox Code Playgroud)

选项1

这里调用@Override的方法beforeRequest(),但不会调用我创建的重载方法(我添加了@RequestBody按照其他解决方案获取正文)。

{
    "keyUserAgent": "CFNetwork/1209 Darwin/20.2.0",
    "locale": "en_US",
    "eid": "8904977033",
    "sessionId": "VGA-G20201030-776878787-1AD5-11EB-895C-H78789GJJH"
}
Run Code Online (Sandbox Code Playgroud)

选项2

在这里它是这样的null

@Component
public class CustomLoggingFilter extends AbstractRequestLoggingFilter {

    protected void beforeRequest(HttpServletRequest request, String message, @RequestBody RequestDTO requestBody) {
        requestBody.getKeyUserAgent();
        requestBody.getEid();
        System.out.println("Eid: " + requestBody.getEid());
        System.out.println("getKeyUserAgent: " + requestBody.getKeyUserAgent());
    }

}
Run Code Online (Sandbox Code Playgroud)

java spring request http-request-parameters spring-boot

3
推荐指数
1
解决办法
2万
查看次数

如何获取log4j2中的trace id和span id,格式为[traceId, spanId]?

如何在 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

我的 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>
Run Code Online (Sandbox Code Playgroud)

方面类:

但是,在我的 Aspect …

java spring trace spring-boot spring-cloud-sleuth

1
推荐指数
1
解决办法
9612
查看次数