在开发调试,或者生产环境处理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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐