我参考了博客文章 Contextual Logging with Reactor Context and MDC 但我不知道如何在 WebFilter 中访问反应器上下文。
@Component
public class RequestIdFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
List<String> myHeader = exchange.getRequest().getHeaders().get("X-My-Header");
if (myHeader != null && !myHeader.isEmpty()) {
MDC.put("myHeader", myHeader.get(0));
}
return chain.filter(exchange);
}
}
原文由 bitdancer 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一种基于最新方法的解决方案,截至 _2021 年 5 月_,摘自 官方文档:
鉴于您的
application.properties
中有以下行:然后每次调用端点时,您的服务器日志将包含如下日志:
每次你想在反应上下文中手动记录一些东西时,你都需要将以下内容添加到你的反应链中:
如果您希望将
X-Request-ID
传播到其他服务以进行分布式跟踪,您需要从反应上下文(而不是从 MDC)读取它并使用以下内容包装您的WebClient
代码: