我从另一个微服务调用我的 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) 我想通过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)
这里调用@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)
在这里它是这样的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) 如何在 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="%logger{36}" threadName="%thread" appName="${springAppName:-}" trace="%X{X-B3-TraceId:-}" span="%X{X-B3-SpanId:-}" spanName="%X{X-Span-Name:-}" parent="%X{X-B3-ParentSpanId:-}" exportable="%X{X-Span-Export:-}" pid="${PID:-}" txnId="%X{txnId}" %msg%n"/> -->
<!-- <property name="PATTERN" value="%h %l %u [%date{dd/MMM/yyyy:HH:mm:ss.SSS}] "%r" %s %b " "%i{User-Agent}" [trace=%responseHeader{X-B3-TraceId},span=%i{X-B3-SpanId}] %D"/> -->
</Properties>
Run Code Online (Sandbox Code Playgroud)
方面类:
但是,在我的 Aspect …