spring boot项目启动时候会打印对外提供的rest接口的Mapped的信息,但是有的时候会出现不打印的情况,那是因为spring boot的版本是2.1以上了,源码做了一定的修改。
解决方案
解决方案很简单,只需要在application.properties中添加以下配置即可:
logging.level.org.springframework.web=trace
问题出现的原因
我们发现只有在spring boot2.1版本后才会出现这个问题,而spring boot2.1后的版本对应的spring的版本就是5了,而打印这个rest接口信息的日志就在webmvc包中,通过跟踪源码我们发现,在spring5版本之前,打印这个信息的代码在AbstractHandlerMethodMapping.MappingRegistry.register方法中:
public void register(T mapping, Object handler, Method method) {
this.readWriteLock.writeLock().lock();
try {
HandlerMethod handlerMethod = createHandlerMethod(handler, method);
assertUniqueMethodMapping(handlerMethod, mapping);
if (logger.isInfoEnabled()) {
//info级别就会打印
logger.info("Mapped \"" + mapping + "\" onto " + handlerMethod);
}
……
}
可以看出,这要是info级别的日志就会打印该信息,我们再来看一下spring5版本后,我们发现在register方法的时候没有打印的逻辑,该逻辑移到了register之前了:
protected void detectHandlerMethods(Object handler) {
……
if (logger.isTraceEnabled()) {
//只有当日志级别为trace的时候,才会打印
logger.trace(formatMappings(userType, methods));
}
methods.forEach((method, mapping) -> {
Method invocableMethod = AopUtils.selectInvocableMethod(method, userType);
//调用register方法
registerHandlerMethod(handler, invocableMethod, mapping);
});
}
}
从源码中我们就能看到区别了,所以spring5以上的版本想要打印该信息,就需要添加上面的配置。