标签:register boot2.1 spring 打印 mapping 版本 Mapped logger
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以上的版本想要打印该信息,就需要添加上面的配置。
标签:register,boot2.1,spring,打印,mapping,版本,Mapped,logger 来源: https://blog.csdn.net/mazhen1991/article/details/101103089
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。