![](/img/trans.png)
[英]How to get request body from ServerRequest object in Spring WebFlux reactive?
[英]Spring Webflux, log response body from reactive http request only in debug mode
关于如何从 Webflux Webclient 发送的 HTTP 请求中记录响应正文的小问题,但请仅在调试模式下。
目前,在应用程序中,我正在以这种方式进行响应式 http 出站呼叫:
webClient.mutate()
.baseUrl(someURL)
.build()
.post()
.uri(someRoute)
.body(BodyInserters.fromValue(myRequest))
.retrieve()
.bodyToMono(String.class);
这工作正常。 但是,有时会出现问题,我希望查看响应正文以进行调试。
因此,我做出了错误的决定来使用.log()
webClient.mutate()
.baseUrl(someURL)
.build()
.post()
.uri(someRoute)
.body(BodyInserters.fromValue(myRequest))
.retrieve()
.bodyToMono(String.class)
.log();
这很棒,我可以看到一些日志,类似于这样:
[ctor-http-nio-3] reactor.Mono.LiftFuseable.1 : | onSubscribe([Fuseable] ScopePassingSpanSubscriber)
[ctor-http-nio-3] reactor.Mono.LiftFuseable.1 : | request(unbounded)
[ctor-http-nio-3] reactor.Mono.LiftFuseable.1 : | onNext({foo='bar'})
[ctor-http-nio-3] reactor.Mono.LiftFuseable.1 : | onComplete()
但是,无论日志级别如何,我现在都在记录...
无论我使用logging.level.root=DEBUG
设置的级别如何,我现在总是能看到日志。
请问如何实现这一点,但仅适用于调试日志级别? 我正在查看 API,似乎.log() 可以接受参数,但我无法使其仅用于调试。
或者,仅在调试级别实现日志记录响应主体的其他一些方法可能会很棒。
谢谢
您可以根据日志记录级别(或其他一些配置文件/环境指标)有条件地添加log()
)。
Mono<String> makeCall(final WebClient webClient, final ?? myRequest) {
final Mono<String> response = webClient.mutate()
.baseUrl(someURL)
.build()
.post()
.uri(someRoute)
.body(BodyInserters.fromValue(myRequest))
.retrieve()
.bodyToMono(String.class);
if (LOG.isDebugEnabled()) {
return response.log();
}
return response;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.