Spring WebFlux ExchangeFunctions регистрирует отсутствующие сведения о теле запросаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring WebFlux ExchangeFunctions регистрирует отсутствующие сведения о теле запроса

Сообщение Anonymous »

Вопрос
Почему журналирование тела запроса не включает сериализованные данные запроса? Как я могу настроить свое приложение для регистрации полной информации о теле запроса?
Я пытаюсь зарегистрировать тело запроса, отправленное через WebClient, в моем приложении Spring WebFlux. Я настроил средство ведения журнала и веб-клиент, как показано ниже, но в журнале отображается только минимальная информация о запросе. Вот моя текущая конфигурация и наблюдаемое поведение
Конфигурация Конфигурация веб-клиента

Код: Выделить всё

@Bean
public WebClient webClient() {
// Memory buffer configuration
ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder()
.codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(1024 * 1024 * 50))
.build();
// Enable logging request details
exchangeStrategies.messageWriters().stream()
.filter(LoggingCodecSupport.class::isInstance)
.forEach(writer -> ((LoggingCodecSupport) writer).setEnableLoggingRequestDetails(true));

ConnectionProvider provider = ConnectionProvider.builder("provider")
.maxConnections(100)
.maxIdleTime(Duration.ofSeconds(30))
.maxLifeTime(Duration.ofSeconds(30))
.pendingAcquireTimeout(Duration.ofSeconds(60))
.pendingAcquireMaxCount(-1)
.evictInBackground(Duration.ofSeconds(30))
.lifo()
.build();

HttpClient httpClient = HttpClient.create(provider)
.wiretap("reactor.netty.http.client.HttpClient", LogLevel.INFO, AdvancedByteBufFormat.TEXTUAL)
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 2000)
.responseTimeout(Duration.ofSeconds(60))
.doOnConnected(conn -> conn.addHandlerLast(new ReadTimeoutHandler(30, TimeUnit.SECONDS))
.addHandlerLast(new WriteTimeoutHandler(30, TimeUnit.SECONDS)));

return WebClient.builder()
.defaultHeader("Accept", MediaType.APPLICATION_JSON_VALUE)
.defaultHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE)
.clientConnector(new ReactorClientHttpConnector(httpClient))
.exchangeStrategies(exchangeStrategies)
.build();
}
Конфигурация регистратора Метод запроса отправки

Код: Выделить всё

public void sendRequest() {
Map requestBody = Map.of("name", "example", "value", 123);

String response = webClient.post()
.uri("http://localhost:8080/v1/web-client/server-post")
.bodyValue(requestBody)
.retrieve()
.bodyToMono(String.class)
.block();

System.out.println("Response: " + response);
}
Наблюдаемые журналы

Код: Выделить всё

2025-01-15 19:08:17.108 TRACE 64787 --- [http-nio-8080-exec-5] o.s.w.r.f.client.ExchangeFunctions : [2d080393] HTTP POST http://localhost:8080/v1/web-client/server-post, headers=[Accept:"application/json, application/xml", Content-Type:"application/json"]
Ожидаемые журналы

Код: Выделить всё

[TRACE] org.springframework.web.reactive.function.client.ExchangeFunctions - [Request transformation] Transforming request body to serialized format.
[DEBUG] org.springframework.web.reactive.function.client.ExchangeFunctions - Request Body: {"name":"example","value":123}
Env
  • Версия Spring Boot: 3.3
  • Версия Java: 17
  • Reactor Netty: версия по умолчанию, предоставляемая зависимостями Spring Boot.
  • Logging Framework: настройка ведения журнала по умолчанию в Spring Boot (Logback).
Устранение неполадок
  • Проверено, что для средства ведения журнала для org.springframework.web.reactive.function.client.ExchangeFunctions установлено значение TRACE .
  • Поэкспериментировал с изменением уровня журнала на INFO.
  • Я попробовал полностью удалить конфигурацию прослушивания, чтобы посмотрите, не противоречит ли это настройке ведения журнала Spring.

Код: Выделить всё

.wiretap("reactor.netty.http.client.HttpClient", LogLevel.INFO, AdvancedByteBufFormat.TEXTUAL)
  • Удалена функция прослушивания
Что мне не хватает в моей конфигурации? Требуется ли дополнительная настройка для подробного протоколирования сериализованного тела запроса? Будем очень признательны за любые указания или рекомендации.


Подробнее здесь: https://stackoverflow.com/questions/793 ... dy-details
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»