如何为指定的Spring Boot Webclient实例单独设置Netty日志级别
解决方案
问题根源:你当前两个WebClient关联的HttpClient默认复用了同一个日志类别reactor.netty.http.client,所以全局配置日志级别会同时影响两个实例。可以通过给需要打日志的HttpClient单独指定自定义日志类别实现隔离,操作步骤如下:
步骤1:修改需要开启日志的HttpClient的wiretap配置
将createWebClientWithTimeout方法中wiretap的第一个参数替换为你自定义的日志名称(示例为com.yourproject.biz.SpecialWebClientLog,可按需修改):
private ClientHttpConnector createWebClientWithTimeout() { // 创建reactor netty HTTP client HttpClient httpClient = HttpClient.newConnection() // 替换第一个参数为自定义的日志类别名称 .wiretap("com.yourproject.biz.SpecialWebClientLog", LogLevel.DEBUG, AdvancedByteBufFormat.TEXTUAL) .compress(true) .tcpConfiguration(tcpClient -> { tcpClient = tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, linkedinConnectTimeoutInSeconds * 1000) .doOnConnected(conn -> conn .addHandlerLast(new ReadTimeoutHandler(linkedinReadTimeoutInSeconds, TimeUnit.SECONDS)) .addHandlerLast(new WriteTimeoutHandler(linkedinWriteTimeoutInSeconds, TimeUnit.SECONDS))); return tcpClient; }); // 基于上述http client创建client http连接器 return new ReactorClientHttpConnector(httpClient); }
步骤2:单独配置自定义日志类别的级别
在application.properties中只给你自定义的日志类别设置DEBUG级别,保留全局reactor.netty.http.client的级别为默认INFO即可:
# 仅给自定义的特殊WebClient开启debug日志 logging.level.com.yourproject.biz.SpecialWebClientLog=DEBUG # 不要配置全局的reactor.netty.http.client级别,默认INFO即可,避免第一个WebClient输出日志
配置完成后:
- 第一个通过
WebClient.create()创建的实例使用默认的日志类别,级别为INFO,不会输出DEBUG级别的请求响应日志 - 第二个自定义的WebClient使用单独的日志类别,级别为DEBUG,会输出完整的请求响应头、报文等日志
内容的提问来源于stack exchange,提问作者Fredo
相关产品推荐
相关产品推荐

