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应用:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值