【发布时间】:2021-02-04 11:14:57
【问题描述】:
我正在使用 MDC Logger,除了我使用 HttpClient 异步发送请求时,它在任何地方都能正常工作。 MDC 数据没有传递到下一个线程,这意味着它们不在我们的日志中。我怎样才能让新线程拥有 MDC 标头?
java.net.http.HttpClient.newHttpClient()
.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(restLogging::logResponse)
.thenApply(response -> handleResponse(url, responseTypeClass, objectMapper, response));
【问题讨论】:
-
复制到新线程。如您所见,MDC 是线程绑定的,因此您需要复制它。
-
如何将其复制到新线程?我见过一些例子,你有一个 withMdc 包装器并像
CompletableFuture.supplyAsync(withMdc(() ->一样使用它,但在这种情况下,HttpClient.sendAsync 是创建 CompletableFuture 的那个?
标签: java completable-future mdc java-http-client