Как в Spring WebFlux включить Wire Log?

Включение 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 или использовать его только для отладки и разработки.