relatedId传播到弹簧侦听1.x

时间:2018-10-23 13:53:29

标签: spring-cloud slf4j spring-cloud-sleuth

我有以下设置:

代理(P)-HTTP-> Spring Boot 2应用程序(X)-HTTP-> Spring Boot 1应用程序(Y)

代理将requestId作为HTTP标头发送,我需要将其包含在X和Y的日志中。

对于X应用程序,我可以使用Spring Cloud Sleuth 2的支持轻松地使用

spring: sleuth: propagation-keys: requestId

并根据我添加的CurrentTraceContext的启发创建一个Slf4jCurrentTraceContext实现

MDC.put("requestId", ExtraFieldPropagation.get(currentSpan, "requestId"));

然后我可以使用以下日志模式轻松地将其添加到日志中:

%d{yy-MM-dd E HH:mm:ss.SSS} %5p [component=${springAppName},requestId=%X{requestId:-}] %m%n"

但是现在我需要将requestId也传播到Y app。

不幸的是,我无法利用Spring Cloud Sleuth 2.0中引入的优点(例如勇敢的库中的TraceContext),因为那是Spring Boot 1.x应用程序。

想知道有哪些选择?

我当时正在考虑扩展Slf4jSpanLogger并注入DefaultTracer,但不确定如何获取requestId,而SpanLogger中没有TraceContext。

1 个答案:

答案 0 :(得分:0)

requestId必须在标题中。您将必须修改解析Boot 1.x的HTTP标头的当前逻辑,并从标头中检索该值并将其放入跨度中。

然而,最简单的方法是随着行李原因传播该值,因为行李对于Boot 1.x开箱即用。这样,如果我们看到带有baggage-前缀的标头,则Sleuth 1.3.x将自动传播它。请记住将Boot 2.0中的行李列入白名单。