繁体   English   中英

Spring Webflux,仅在调试模式下记录来自反应式 http 请求的响应正文

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM