Включение Wire Log в Spring WebFlux предоставляет возможность прослушивать и записывать сырые запросы и ответы, передаваемые по сети на уровне протокола.
Для включения Wire Log в Spring WebFlux можно использовать библиотеку "OkHttp" в качестве HTTP-клиента. OkHttp является популярным HTTP-клиентом для Java, который предоставляет мощные возможности для работы с HTTP-запросами и ответами.
Для начала добавьте зависимость от OkHttp в файле pom.xml, если вы используете Maven, или build.gradle, если используете Gradle:
Maven:
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.1</version> </dependency>
Gradle:
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
После добавления зависимости от OkHttp в ваш проект, вы можете создать новый класс WireLoggingInterceptor
, который будет реализовывать интерфейс Interceptor
из OkHttp:
import okhttp3.Interceptor; import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; import java.io.IOException; import java.nio.charset.Charset; public class WireLoggingInterceptor implements Interceptor { private final HttpLoggingInterceptor logger; public WireLoggingInterceptor() { logger = new HttpLoggingInterceptor(System.out::println); } @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); // Log request logger.log(request); Response response = chain.proceed(request); // Log response logger.log(response); return response; } }
Затем, вы можете создать экземпляр WebClient
с использованием OkHttp и добавить созданный ранее WireLoggingInterceptor
в ExchangeFilterFunction
, чтобы перехватить и логировать запросы и ответы:
import org.springframework.web.reactive.function.client.ExchangeFilterFunctions; import org.springframework.web.reactive.function.client.WebClient; public class Main { public static void main(String[] args) { // Создание WebClient с использованием OkHttp WebClient webClient = WebClient.builder() .clientConnector(new ReactorClientHttpConnector( HttpClient.create().secure())) .filter(ExchangeFilterFunctions .basicAuthentication("username", "password")) .filter(new WireLoggingInterceptor()) .build(); // Остальной код работы с WebClient // ... } }
Теперь, при выполнении HTTP-запросов с использованием WebClient, вы будете видеть логи сырого запроса и ответа в вашем выводе консоли.
Обратите внимание, что использование Wire Log может негативно повлиять на производительность приложения из-за дополнительной нагрузки на логирование. Поэтому в продакшн-среде рекомендуется отключить Wire Log или использовать его только для отладки и разработки.