spring boot 如何打印请求日志
如何通过配置打印mvc请求日志
·
在开发调试,或者生产环境处理bug时,我们通常是需要通过日志来分析问题所在,而请求参数作为入口,时我们的切入点。
mvc本身提供了想要的打印日志方式。
把日志级别调整成:
logging.level.root: debug
我发送请求后会看到一下日志:
所以我们只需要调整:
logging.level.org.springframework.web.servlet.DispatcherServlet: debug
就可以输入请求的日志了。
不过通过测试发现,此时没有办法打印请求体
通过调试源码最终定位到日志消息生产的位置:
org.springframework.web.servlet.DispatcherServlet#logRequest
如果请求类型是:multipart/开头请求体就是
params = "multipart";
如果不需要打印请求详情,则请求体就是
"masked" 或 ""
如果日志级别是trace则会打印请求头
if (traceOn) {
List<String> values = Collections.list(request.getHeaderNames());
String headers = values.size() > 0 ? "masked" : "";
if (isEnableLoggingRequestDetails()) {
headers = values.stream().map(name -> name + ":" + Collections.list(request.getHeaders(name)))
.collect(Collectors.joining(", "));
}
return message + ", headers={" + headers + "} in DispatcherServlet '" + getServletName() + "'";
}
日志界别调整成trace很简单:
logging.level.org.springframework.web.servlet.DispatcherServlet: trace
如果日志没有输出则需要检查日志配置的最低级别,配置文件一般资源目录下:logback.xml
一般我们设置的是 debug级别或info。如果要输出trace级别的日志需要调整。
如果要输出请求的详细参数,需要设置org.springframework.web.servlet.FrameworkServlet#enableLoggingRequestDetails=true
跟进源码,在
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration.DispatcherServletConfiguration#dispatcherServlet
通过配置,可以设置enableLoggingRequestDetails=true
spring.mvc.log-request-details: true
最终效果:
完整配置:
logging.level.org.springframework.web.servlet.DispatcherServlet: trace
spring.mvc.log-request-details: true
更多推荐
已为社区贡献1条内容
所有评论(0)