75 lines
2.6 KiB
Java
75 lines
2.6 KiB
Java
|
|
package com.nis.interceptor;
|
||
|
|
|
||
|
|
import java.text.SimpleDateFormat;
|
||
|
|
|
||
|
|
import javax.servlet.http.HttpServletRequest;
|
||
|
|
import javax.servlet.http.HttpServletResponse;
|
||
|
|
|
||
|
|
import org.springframework.core.NamedThreadLocal;
|
||
|
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||
|
|
import org.springframework.web.servlet.ModelAndView;
|
||
|
|
|
||
|
|
import com.nis.util.DateUtils;
|
||
|
|
import com.nis.util.LogUtils;
|
||
|
|
import com.nis.web.service.BaseService;
|
||
|
|
|
||
|
|
public class LogInterceptor extends BaseService implements HandlerInterceptor{
|
||
|
|
|
||
|
|
private static final ThreadLocal<Long> timeThreadLocal =
|
||
|
|
new NamedThreadLocal<Long>("ThreadLocal StartTime");
|
||
|
|
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
|
||
|
|
throws Exception {
|
||
|
|
long beginTime = System.currentTimeMillis();//1、开始时间
|
||
|
|
timeThreadLocal.set(beginTime); //线程绑定变量(该数据只有当前请求的线程可见)
|
||
|
|
if (logger.isDebugEnabled()){
|
||
|
|
logger.debug("开始计时: {} URI: {}", new SimpleDateFormat("hh:mm:ss.SSS")
|
||
|
|
.format(beginTime), request.getRequestURI());
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
|
||
|
|
ModelAndView modelAndView) throws Exception {
|
||
|
|
if (modelAndView != null){
|
||
|
|
logger.info("ViewName: " + modelAndView.getViewName());
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
|
||
|
|
throws Exception {
|
||
|
|
long beginTime = timeThreadLocal.get();//得到线程绑定的局部变量(开始时间)
|
||
|
|
long endTime = System.currentTimeMillis(); //2、结束时间
|
||
|
|
|
||
|
|
long consumerTime = endTime - beginTime;
|
||
|
|
|
||
|
|
// 打印JVM信息。
|
||
|
|
if (logger.isDebugEnabled()){
|
||
|
|
|
||
|
|
Object[] params = new Object[]{
|
||
|
|
new SimpleDateFormat("hh:mm:ss.SSS").format(endTime)
|
||
|
|
, DateUtils.formatDateTime(consumerTime)
|
||
|
|
,request.getRequestURI()
|
||
|
|
,Runtime.getRuntime().maxMemory()/1024/1024
|
||
|
|
,Runtime.getRuntime().totalMemory()/1024/1024
|
||
|
|
,Runtime.getRuntime().freeMemory()/1024/1024
|
||
|
|
,(Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()+Runtime.getRuntime().freeMemory())/1024/1024};
|
||
|
|
logger.debug("计时结束:{} 耗时:{} URI: {} 最大内存: {}m 已分配内存: {}m 已分配内存中的剩余空间: {}m 最大可用内存: {}m",params);
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
// 保存日志
|
||
|
|
LogUtils.saveLog(request, handler, ex, null, consumerTime);
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|