spring boot2.1后的版本不打印Mapped日志问题

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以上的版本想要打印该信息,就需要添加上面的配置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值