#spring-boot #spring-webclient #reactor-netty
Вопрос:
У нас есть 2 разных экземпляра веб-клиентов spring boot. Мы хотим, чтобы один из них регистрировал все запросы/ответы, а другой ничего не регистрировал. Установка:
logging.level.reactor.netty.http.client=debug
в файле application.properties оба экземпляра регистрируют запросы/ответы в журнале. Есть ли способ программно установить уровень журнала в одном из экземпляров для регистрации уровней отладки, а в другом-нет?
Мы создаем первый веб-клиент, подобный этому:
WebClient.создать();
Для этого нам не нужно ведение журнала отладки. Второй, для которого мы хотим вести журнал, мы создаем так:
return WebClient.builder()
.clientConnector(createWebClientWithTimeout())
// Add base url to all requests (callers only need to add the path and query params)
.baseUrl(baseUrl)
// Increase the buffer size from 256K to 1M
.codecs(configurer -> configurer
.defaultCodecs()
.maxInMemorySize(1024 * 1024))
// Filter to add bearer token to auth header before sending request
.filter((request, next) -> getToken(custId).map(setAuthHeader(request)).flatMap(next::exchange))
// Filter to send the request, and try again if it has an auth error
.filter((request, next) -> next.exchange(request).flatMap(clientResponse -> {
:::
return Mono.just(clientResponse);
})).build();
and
private ClientHttpConnector createWebClientWithTimeout() {
// create reactor netty HTTP client
HttpClient httpClient = HttpClient.newConnection()
.wiretap("reactor.netty.http.client.HttpClient",
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;
});
// create a client http connector using above http client
return new ReactorClientHttpConnector(httpClient);
}
Если мы не установим ведение журнала.уровень.реактор.netty.http.client=отладка, ни один из этих веб-клиентов не регистрирует операторы отладки netty. Если мы зададим параметр отладки, оба регистрируют запросы, второй также регистрирует заголовки и тела запросов/ответов.
Комментарии:
1. Вы включаете
wiretap
для http — клиента?2. Мы создаем первый веб-клиент, подобный этому:
3. @VioletaGeorgieva Я обновил описание, включив в него код, используемый для создания 2 веб-клиентов.
4. Можете ли вы попробовать включить только
logging.level.reactor.netty.http.client.HttpClient=debug
5. @VioletaGeorgieva Это сработало, спасибо. Я ценю вашу помощь.