通过拦截器实现记录服务端Controller处理时间
java代码部分
package com.company.interception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.util.StopWatch;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class TimeInterceptor implements HandlerInterceptor {
private static Log log = LogFactory.getLog(TimeInterceptor.class);
private final ThreadLocal<StopWatch> stopWatchLocal = new ThreadLocal<StopWatch>();
private int logMin;
public void setLogMin(int logMin) {
this.logMin = logMin;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
StopWatch stopWatch = new StopWatch(handler.toString());
stopWatchLocal.set(stopWatch);
stopWatch.start(handler.toString());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
StopWatch stopWatch = stopWatchLocal.get();
stopWatch.stop();
String currentPath = request.getRequestURI();
String queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
if (stopWatch.getTotalTimeMillis() > logMin) {
log.warn("Access URL [" + currentPath + queryString + "] " + stopWatch.getTotalTimeMillis() + " ms");
}
stopWatchLocal.remove();
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
配置文件:
记录所有处理时间大于500毫秒的URL
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean id="timeInterceptor" class="com.company.interception.TimeInterceptor">
<property name="logMin">
<value>500</value>
</property>
</bean>
</mvc:interceptor>