zoukankan      html  css  js  c++  java
  • 记录请求时间

    统计记录接口的请求时间:

    package com.onloon.data.centralization.web.interceptor;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.onloon.summer.common.utils.JsonUtil;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 请求拦截器
     *
     * @author <a href="mailto:taojiagui@loonxi.com">云启</a>
     * @version 1.0 2017年5月12日
     * @since 1.0
     */
    public class RequestInterceptor implements HandlerInterceptor {
    
        private Logger logger = LoggerFactory.getLogger(RequestInterceptor.class);
    
        // 存储请求额外信息
        private final ThreadLocal<RequestHolder> requestThread = new ThreadLocal<RequestHolder>();
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            String uri = request.getRequestURI();
            if (logger.isInfoEnabled()) {
                logger.info("RequestInterceptor.preHandle execute uri={}", uri);
            }
    
            RequestHolder holder = new RequestHolder();
            holder.setStartTime(System.currentTimeMillis());
            holder.setUri(uri);
            requestThread.set(holder);
            logger.info("preHandle 当前线程:{},holder信息={}", Thread.currentThread().getName(), JsonUtil.toJsonString(holder));
    
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            RequestHolder holder = getRequestHolder();
            logger.info("afterCompletion 当前线程:{},holder信息={},当前时间={},请求消耗时间={} ms", Thread.currentThread().getName(),
                    JsonUtil.toJsonString(holder), System.currentTimeMillis(),
                    (System.currentTimeMillis() - holder.getStartTime()));
        }
    
        private RequestHolder getRequestHolder() {
            RequestHolder holder = requestThread.get();
            if (holder == null) {
                holder = new RequestHolder();
                requestThread.set(holder);
            }
            return holder;
        }
    
    }
  • 相关阅读:
    Oracle锁表与解锁 对象锁与解锁
    Unity3D开发之NGUI点击事件穿透响应处理
    Unity 3D 关于给APK包加广告的流程
    Unity 3D 粒子系统的一点经验
    Unity3D模型的细致纹理问题解决办法
    Unity 3D学习之 Prime31 Game Center插件用法
    Unity3D如何制作透贴和使用透贴模型
    NGUI的部分控件无法更改layer?
    关于Unity3D中Resources动态加载NGUI图片的方法
    关于NGUI的动态加载后的刷新显示问题,解决办法!!
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/11750612.html
Copyright © 2011-2022 走看看