Spring boot 记录Spring web流量HttpWebHandlerAdapter标头

Spring boot 记录Spring web流量HttpWebHandlerAdapter标头,spring-boot,http-headers,spring-webflux,Spring Boot,Http Headers,Spring Webflux,如何在SpringWebFlux中记录/调试HttpWebHandlerAdapter头文件? 如何设置HttpWebHandlerAdapter.enableLoggingRequestDetails=true 默认情况下为false,并显示headers={masked} HTTP POST "/cart/add", headers={masked} Completed 403 FORBIDDEN, headers={masked} Handling completed 我尝试过文档中描述

如何在SpringWebFlux中记录/调试
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()
方法的具体实现每次都会返回不同的对象实例:

@配置
@Slf4j
公共类WebFluxConfiguration扩展了WebFluxConfiguration支持{
@凌驾
public void configureHttpMessageCodecs(ServerCodeConfigurer配置){
config.getReaders().forEach(r->{
if(r实例的LoggingCodeSupport){
((LoggingCodeSupport)r).setEnableLoggingRequestDetails(true);
log.info(“{}.isEnableLoggingRequestDetails={}”,r,((LoggingCodeSupport)r.isEnableLoggingRequestDetails());
}else log.info(“{}”,r);
});
config.getReaders().forEach(r->{
if(r实例的LoggingCodeSupport)
log.info(“{}.isEnableLoggingRequestDetails={}”,r,((LoggingCodeSupport)r.isEnableLoggingRequestDetails());
else log.info(“{}”,r);
});
}
}

解决方案是添加一个新的
customCodec

@配置
@Slf4j
公共类WebFluxConfiguration扩展了WebFluxConfiguration支持{
@凌驾
public void configureHttpMessageCodecs(ServerCodeConfigurer配置){
FormHttpMessageReader=新FormHttpMessageReader();
reader.setEnableLoggingRequestDetails(true);
config.customCodecs().register(读卡器);
}
}
日志输出:

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