springMVC攔截器實(shí)現(xiàn)日志記錄請(qǐng)求耗時(shí)

定義攔截器

public class LogTimeHandlerInterceptor extends HandlerInterceptorAdapter {
 // 單例多線程 開始時(shí)間綁定在線程上
    private ThreadLocal<Long> startTimeThreadLocal = new ThreadLocal<>();
    private static final Logger log = LoggerFactory.getLogger("RequestTime");
 //獲取請(qǐng)求前時(shí)間并放入startTimeThreadLocal 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        long start = System.currentTimeMillis();
        startTimeThreadLocal.set(start);
        return true;
    }
//請(qǐng)求結(jié)束后計(jì)算出耗時(shí) 日志記錄相關(guān)信息
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        try {
            if (handler instanceof HandlerMethod) {
                HandlerMethod method = (HandlerMethod) handler;
                String className = method.getBeanType().getName();
                String methodName = method.getMethod().getName();
                Long startTime = startTimeThreadLocal.get();
                Long endTime = System.currentTimeMillis();
                StringBuilder logs = new StringBuilder();
              //可在此處獲取當(dāng)前用戶放日志信息里 
                logs.append(" IP:").append(HttpUtil.getIpAddress(request));//獲取請(qǐng)求地址IP 自己實(shí)現(xiàn) 
                logs.append(" ").append(className).append("::").append(methodName);
                long time = endTime - startTime;
                logs.append(" 耗時(shí):").append(time).append("(ms)");
                log.info(logs.toString());
            }
        } finally {
             //清理開始時(shí)間
            startTimeThreadLocal.remove();
        }
    }
}

可以根據(jù)需求記錄更多信息,也可以把日子信息存入數(shù)據(jù)庫。

配置攔截器(基于springBoot)

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LogTimeHandlerInterceptor());
        }
}

效果如下


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容