springmvc5.3.4增加mapping日志打印
前言
新版本的springmvc以及去掉了mapping的日志打印相关代码,可以通过下面的方法在合适的位置上打印mapping的日志
创建RequestMappingHandlerMapping子类
在RequestMappingHandlerMapping初始化的时候会调用registerMapping或者registerHandlerMethod完成映射的注册,我们可以覆盖这两个方法,把打印日志的代码加入到里面。
public class LogMappingInfoRequestMappingHandlerMapping
extends RequestMappingHandlerMapping {
private static final Logger LOGGER = LoggerFactory
.getLogger(LogMappingInfoRequestMappingHandlerMapping.class);
private boolean isLogFrist = true;
@Override
public void registerMapping(RequestMappingInfo mapping, Object handler,
Method method) {
super.registerMapping(mapping, handler, method);
logRequestMappingInfo(handler, method, mapping);
}
@Override
protected void registerHandlerMethod(Object handler, Method method,
RequestMappingInfo mapping) {
super.registerHandlerMethod(handler, method, mapping);
logRequestMappingInfo(handler, method, mapping);
}
/**
* 打印handler映射日志
*
* @param handler
* @param method
* @param mapping
*/
private void logRequestMappingInfo(Object handler, Method method,
RequestMappingInfo mapping) {
if (LOGGER.isInfoEnabled()) {
if (isLogFrist) {
LOGGER.info(
"--------------------------------handlerMapping LOG---------------------------------------");
isLogFrist = false;
}
String handlerName = null;
Class<?> handlerClazz = null;
if (handler instanceof String) {
handlerName = (String) handler;
handlerClazz = getApplicationContext().getType(handlerName);
} else if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
handlerClazz = handlerMethod.getBeanType();
}
LOGGER.info(mapping + " is mapped to " + handlerClazz.getTypeName() + "."
+ method.getName() + "()");
}
}
}
应用自定义的RequestMappingHandlerMapping
上面已经创建好了LogMappingInfoRequestMappingHandlerMapping类,接下来在springmvc配置中把该类配置进去,让其生效。
@Configuration
public class SpringmvcConfiguration implements WebMvcConfigurer {
/**
* 用于注册LogMappingInfoRequestMappingHandlerMapping
*
* @return
*/
@Bean
public WebMvcRegistrations createWebMvcRegistrations() {
System.out.println();
return new WebMvcRegistrations() {
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new LogMappingInfoRequestMappingHandlerMapping();
}
@Override
public RequestMappingHandlerAdapter getRequestMappingHandlerAdapter() {
return WebMvcRegistrations.super.getRequestMappingHandlerAdapter();
}
@Override
public ExceptionHandlerExceptionResolver getExceptionHandlerExceptionResolver() {
return WebMvcRegistrations.super.getExceptionHandlerExceptionResolver();
}
};
}
}
修改日志级别
下面是在springboot配置文件中声明该类的日志级别为INFO,其中cn.com.example.code.handlerMapping是LogMappingRequestMappingHandlerMapping类的包名
logging.level.org.springframework=INFO
logging.level.cn.com.example.code.handlerMapping.LogMappingRequestMappingHandlerMapping=INFO
效果
完成上面的工作后,启动springboot应用: