拦截器记录接口耗时
1、定义一个拦截器,实现拦截器接口
package org.example.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LogTimeInterceptor implements HandlerInterceptor {
private static final Logger LOGGER = LoggerFactory.getLogger(LogTimeInterceptor.class);
private static final String START_TIME = "__START_TIME__";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
LOGGER.info("================== [{}]请求进入 ==================", request.getRequestURI());
if (request.getAttribute(START_TIME) != null) {
return true;
}
request.setAttribute(START_TIME, System.currentTimeMillis());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
Object attribute = request.getAttribute(START_TIME);
if (attribute == null) {
return;
}
long endTime = System.currentTimeMillis();
long startTime = (long) attribute;
if (endTime - startTime < 500){
LOGGER.info("================== [{}]执行完成,耗时为:{} ms ==================", request.getRequestURI(), endTime - startTime);
} else if (endTime - startTime >= 500 && endTime - startTime <= 1000){
LOGGER.error("================== [{}]执行完成,耗时大于500ms,小于1s,耗时为:{} ms ==================", request.getRequestURI(), endTime - startTime);
} else{
LOGGER.error("================== [{}]执行完成,耗时大于1s,耗时为:{} ms ==================", request.getRequestURI(), endTime - startTime);
}
}
}
2、配置拦截器使其生效
package org.example.config;
import org.example.interceptor.LogTimeInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class DefaultWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LogTimeInterceptor logTimeInterceptor = new LogTimeInterceptor();
registry.addInterceptor(logTimeInterceptor)
.addPathPatterns("/**");
}
}