springboot 2.1如何打印 RequestMappin
2020-02-20 本文已影响0人
rock_fish
Spring Boot 2.1 之前 启动的时候日志使用INFO 级别 ,就可以打印 RequestMapping 的信息,示例如下:
logging:
level:
root: info
Spring Boot 2.1 之后的版本 使用以上配置,则无法打印出来RequestMapping信息,从源码:org.springframework.web.servlet.handler.AbstractHandlerMethodMapping#detectHandlerMethods
这个方法里可以看到这些信息的日志级别是TRACE
protected void detectHandlerMethods(Object handler) {
Class<?> handlerType = handler instanceof String ? this.obtainApplicationContext().getType((String)handler) : handler.getClass();
if (handlerType != null) {
Class<?> userType = ClassUtils.getUserClass(handlerType);
Map<Method, T> methods = MethodIntrospector.selectMethods(userType, (method) -> {
try {
return this.getMappingForMethod(method, userType);
} catch (Throwable var4) {
throw new IllegalStateException("Invalid mapping on handler class [" + userType.getName() + "]: " + method, var4);
}
});
if (this.logger.isTraceEnabled()) {
this.logger.trace(this.formatMappings(userType, methods));
}
methods.forEach((method, mapping) -> {
Method invocableMethod = AopUtils.selectInvocableMethod(method, userType);
this.registerHandlerMethod(handler, invocableMethod, mapping);
});
}
}
所以要打印Controller里面的 RequestMapping信息需要把org.springframework.web打印日志的格式设置为trace,示例如下:
最简单的操作root设置为trace,
logging:
level:
root: trace
但是root设置为trace这样会显示出太多trace,debug信息,所以只为RequestMapping所对应的org.springframework.web里日志级别设置为trace:
logging:
level:
org.springframework.web: trace
日志显示的样式如下:
[2020-02-20 16:49:56.056] TRACE 4066 [titans001-c0a8016e-439496-40026,null] [main] [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] :
c.z.t.p.c.HttpController:
{GET /http/get}: get(String,HttpServletRequest)
{POST /http/update}: update(Object,HttpServletRequest)
{DELETE /http/delete}: delete(Object,HttpServletRequest)
{PUT /http/insert}: insert(Object,HttpServletRequest)