Spring中StopWatch的使用

StopWatch简单的秒表,允许多个任务的计时,暴露每个命名任务的总运行时间和运行时间。隐藏使用System.currentTimeMillis(),提高应用程序代码的可读性并减少计算错误的可能性。

以下演示使用StopWatch记录请求摘要日志信息:

@Slf4j
public class PerformanceInteceptor implements HandlerInterceptor { private ThreadLocal<StopWatch> stopWatchThreadLocal = new ThreadLocal<>(); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { StopWatch sw = new StopWatch(); stopWatchThreadLocal.set(sw); sw.start(); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { stopWatchThreadLocal.get().stop(); stopWatchThreadLocal.get().start(); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { StopWatch sw = stopWatchThreadLocal.get(); sw.stop(); String method = handler.getClass().getSimpleName(); if (handler instanceof HandlerMethod) { String beanType = ((HandlerMethod) handler).getBeanType().getName(); String methodName = ((HandlerMethod) handler).getMethod().getName(); method = beanType + "." + methodName; } // sw.getTotalTimeMillis(), 总执行时间 //sw.getTotalTimeMillis() - sw.getLastTaskTimeMillis(), 执行方法体所需要的时间 log.info("{};{};{};{};{}ms;{}ms;{}ms", request.getRequestURI(), method, response.getStatus(), ex == null ? "-" : ex.getClass().getSimpleName(), sw.getTotalTimeMillis(), sw.getTotalTimeMillis() - sw.getLastTaskTimeMillis(), sw.getLastTaskTimeMillis()); stopWatchThreadLocal.remove(); } }

                                                                        微信公众号

                                               

                                                                             JAVA程序猿成长之路

                          分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。 

猜你喜欢

转载自www.cnblogs.com/niugang0920/p/12186531.html