Журналирование Spring web-flux HttpWebHandlerAdapter заголовки - PullRequest
1 голос
/ 14 апреля 2020

Как регистрировать / отлаживать HttpWebHandlerAdapter заголовки в весеннем веб-потоке? Как установить HttpWebHandlerAdapter.enableLoggingRequestDetails = true?

По умолчанию имеет значение false и отображается headers={masked}.

HTTP POST "/cart/add", headers={masked}
Completed 403 FORBIDDEN, headers={masked}
Handling completed

Я пробовал со свойствами, как описано в документации, но не работает.

spring.http.logRequestDetails=true
spring.http.log-request-details=true
logging.level.org.springframework.http.server.reactive.ReactorHttpHandlerAdapter=TRACE
logging.level.org.springframework.web.server.adapter.HttpWebHandlerAdapter=TRACE

Также реализация этого способа не работает, потому что конкретная реализация метода getReaders() каждый раз возвращает разные экземпляры объектов:

@Configuration
@Slf4j
public class WebFluxConfig extends WebFluxConfigurationSupport {

    @Override
    public void configureHttpMessageCodecs(ServerCodecConfigurer config) {
        config.getReaders().forEach(r-> {
            if (r instanceof LoggingCodecSupport) {
                ((LoggingCodecSupport) r).setEnableLoggingRequestDetails(true);
                log.info("# {}.isEnableLoggingRequestDetails={}",r,((LoggingCodecSupport) r).isEnableLoggingRequestDetails());
            } else log.info("# {}",r);
        });
        config.getReaders().forEach(r-> {
            if (r instanceof LoggingCodecSupport)
                log.info("#{}.isEnableLoggingRequestDetails={}",r,((LoggingCodecSupport) r).isEnableLoggingRequestDetails());
            else log.info("# {}",r);
        });
    }
}

1 Ответ

1 голос
/ 14 апреля 2020

Решением является добавление нового customCodec:

@Configuration
@Slf4j
public class WebFluxConfig extends WebFluxConfigurationSupport {

    @Override
    public void configureHttpMessageCodecs(ServerCodecConfigurer config) {
        FormHttpMessageReader reader = new FormHttpMessageReader();
        reader.setEnableLoggingRequestDetails(true);
        config.customCodecs().register(reader);
    }
}

Вывод журналов:

HTTP POST "/cart/add", headers=[Host:"192.168.39.94", X-Request-ID:"a3adf3f2842942944a91de6cbf9fa015", X-Real-IP:"192.168.39.1", X-Forwarded-For:"192.168.39.1", X-Forwarded-Host:"192.168.39.94", X-Forwarded-Port:"80", X-Forwarded-Proto:"http", X-Scheme:"http", Content-Length:"120", User-Agent:"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0", Accept:"application/json, text/plain, */*", Accept-Language:"en-GB,en;q=0.5", Accept-Encoding:"gzip, deflate", Content-Type:"application/json;charset=utf-8", Authorization:"Basic dXNlcjp1c2Vy", X-XSRF-TOKEN:"17e1b013-98b3-4064-8173-bf3af4ce8bc7", Origin:"http://localhost:3000", Referer:"http://localhost:3000/"]
Completed 403 FORBIDDEN, headers=[Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Access-Control-Allow-Origin:"http://localhost:3000", Access-Control-Allow-Credentials:"true", Content-Type:"text/plain", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Content-Type-Options:"nosniff", X-Frame-Options:"DENY", X-XSS-Protection:"1 ; mode=block", Referrer-Policy:"no-referrer", content-length:"45"]
Handling completed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...