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

上一篇:ElasticSearch(五):Mapping和常见字段类型


下一篇:javascript – D3.js地图:如何旋转它?