在 java 中使用 webclient 时,默认情况下不会输出详细的 http 请求和响应日志。要开启这些日志,需要配置底层的 reactor netty 客户端,通过设置 `reactor.netty.http.client` 的日志级别为 `debug` 来实现。

如何配置 Reactor Netty 的日志级别
WebClient 基于 Reactor Netty 构建,其网络通信细节由 Netty 处理。因此,开启日志的关键在于调整 Netty 客户端的日志级别。在 Spring Boot 应用中,这通常通过在 `application.yml` 或 `application.properties` 中配置日志框架(如 Logback 或 Log4j2)来完成。具体做法是将 `reactor.netty.http.client` 包的日志级别设置为 `DEBUG`。这样,当 WebClient 发送请求或接收响应时,Netty 会记录详细的连接、发送和接收信息。

logging:
level:
reactor.netty.http.client: DEBUG
上述配置适用于使用 Logback 作为日志实现的情况。如果使用的是 Log4j2,则需要在 `log4j2.xml` 中添加相应的 logger 配置。配置生效后,控制台或日志文件中将输出类似以下的信息:连接建立、HTTP 方法、URL、状态码以及响应头等信息。这对于排查网络连接问题、验证请求参数是否正确非常有用。
如何在代码中动态调整日志级别
除了通过配置文件静态设置日志级别外,有时需要在运行时动态调整日志级别,例如仅在特定测试场景下开启详细日志。可以通过编程方式获取 Logger 实例并修改其级别。在 Spring Boot 中,可以使用 `LoggerContext` 来动态更改日志级别。以下是一个示例,展示如何在代码中将 `reactor.netty.http.client` 的日志级别设置为 `DEBUG`。

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import org.slf4j.LoggerFactory;
public class LogConfig {
public static void enableWebClientDebug() {
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
context.getLogger("reactor.netty.http.client").setLevel(Level.DEBUG);
}
}
调用 `enableWebClientDebug()` 方法后,WebClient 的日志级别将被临时提升为 DEBUG。这种方法适合在单元测试或调试过程中使用,避免在生产环境中产生过多的日志数据。需要注意的是,动态调整日志级别可能会影响性能,因此建议在必要时才启用。
WebClient 日志中包含哪些关键信息
开启 WebClient 日志后,输出的信息包括多个关键字段,帮助开发者全面监控 HTTP 交互过程。首先,日志会显示连接的建立过程,包括远程地址和端口。其次,它会记录 HTTP 请求的详细信息,如方法(GET、POST 等)、URI 和查询参数。对于响应,日志会包含状态码、响应头和响应体(如果配置了日志拦截器)。这些信息有助于快速定位问题,例如确认请求是否到达服务器、响应是否符合预期等。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











