Как установить уровень журнала netty для выбранных экземпляров веб-клиента spring boot

#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 Это сработало, спасибо. Я ценю вашу помощь.