我有以下设置:
代理(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。
答案 0 :(得分:0)
requestId
必须在标题中。您将必须修改解析Boot 1.x的HTTP标头的当前逻辑,并从标头中检索该值并将其放入跨度中。
然而,最简单的方法是随着行李原因传播该值,因为行李对于Boot 1.x开箱即用。这样,如果我们看到带有baggage-
前缀的标头,则Sleuth 1.3.x将自动传播它。请记住将Boot 2.0中的行李列入白名单。