gpt4 book ai didi

spring-boot - 如何记录 spring-webflux WebClient 请求 + 响应详细信息(主体、标题、elasped_time)?

转载 作者:行者123 更新时间:2023-12-04 17:37:15 33 4
gpt4 key购买 nike

基本上,我想在一个包含带有 Spring WebClient 的正文/标题的日志中记录请求/响应信息。 .

带 Spring RestTemplate我们可以用 ClientHttpRequestInterceptor 做到这一点.我找到关于 ExchangeFilterFunction Spring WebClient但还没有设法以干净的方式做类似的事情。我们可以使用这个过滤器并记录请求,然后记录响应,但我需要在同一个日志跟踪中。

此外,我还没有设法通过 ExchangeFilterFunction.ofResponseProcessor 获得响应正文。方法。

我期待这样的日志(当前实现与 ClientHttpRequestInterceptor 一起使用),其中包含我需要的所有信息:

{
"@timestamp": "2019-05-14T07:11:29.089+00:00",
"@version": "1",
"message": "GET https://awebservice.com/api",
"logger_name": "com.sample.config.resttemplate.LoggingRequestInterceptor",
"thread_name": "http-nio-8080-exec-5",
"level": "TRACE",
"level_value": 5000,
"traceId": "e65634ee6a7c92a7",
"spanId": "7a4d2282dbaf7cd5",
"spanExportable": "false",
"X-Span-Export": "false",
"X-B3-SpanId": "7a4d2282dbaf7cd5",
"X-B3-ParentSpanId": "e65634ee6a7c92a7",
"X-B3-TraceId": "e65634ee6a7c92a7",
"parentId": "e65634ee6a7c92a7",
"method": "GET",
"uri": "https://awebservice.com/api",
"body": "[Empty]",
"elapsed_time": 959,
"status_code": 200,
"status_text": "OK",
"content_type": "text/html",
"response_body": "{"message": "Hello World!"}"
}

有没有人设法用 Spring WebClient 做这样的事情?或者如何继续跟踪 Spring WebClient 的请求/响应问题?

最佳答案

您可以使用 filter(),如下所示:

this.webClient = WebClient.builder().baseUrl("your_url")
.filter(logRequest())
.filter(logResponse())
.build();

private ExchangeFilterFunction logRequest() {
return (clientRequest, next) -> {
log.info("Request: {} {}", clientRequest.method(), clientRequest.url());
clientRequest.headers()
.forEach((name, values) -> values.forEach(value -> log.info("{}={}", name, value)));
return next.exchange(clientRequest);
};
}

private ExchangeFilterFunction logResponse() {
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
log.info("Response: {}", clientResponse.headers().asHttpHeaders().get("property-header"));
return Mono.just(clientResponse);
});
}

关于spring-boot - 如何记录 spring-webflux WebClient 请求 + 响应详细信息(主体、标题、elasped_time)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56144894/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com