主要拦截前端或后天的请求,打印请求方法参数、返回值、耗时、异常的日志。方便开发调试,能很快定位到问题出现在哪个方法中。 前端请求拦截,mvc的** 1 import java.util.Date; 2 import java.util.Iterator; 3 impo ...
主要拦截前端或后天的请求,打印请求方法参数、返回值、耗时、异常的日志。方便开发调试,能很快定位到问题出现在哪个方法中。
前端请求拦截,mvc的**
1 import java.util.Date; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.Set; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import org.codehaus.jackson.map.ObjectMapper; 10 import org.springframework.core.NamedThreadLocal; 11 import org.springframework.web.servlet.HandlerInterceptor; 12 import org.springframework.web.servlet.ModelAndView; 13 14 import com.xxx.eduyun.sdk.log.ApplicationLogging; 15 import com.xxx.flipclass.sdk.client.utils.TimeUtil; 16 17 /** 18 * <b>function:</b> spring mvc 请求** 19 * @author hoojo 20 * @createDate 2016-11-24 下午3:19:27 21 * @file MVCRequestInterceptor.java 22 * @package com.xxx.eduyun.app.mvc.interceptor 23 * @project eduyun-app-web 24 * @blog http://blog.csdn.net/IBM_hoojo 25 * @email hoojo_@126.com 26 * @version 1.0 27 */ 28 public class MVCRequestInterceptor extends ApplicationLogging implements HandlerInterceptor { 29 30 private static final ObjectMapper mapper = new ObjectMapper(); 31 private NamedThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("StopWatch-startTimed"); 32 33 @Override 34 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 35 36 37 info("##############################【一个MVC完整请求开始】##############################"); 38 39 info("*******************MVC业务处理开始**********************"); 40 try { 41 long timed = System.currentTimeMillis(); 42 startTimeThreadLocal.set(timed); 43 44 String requestURL = request.getRequestURI(); 45 info("当前请求的URL:【{}】", requestURL); 46 info("执行目标方法: {}", handler); 47 48 Map<String, ?> params = request.getParameterMap(); 49 if (!params.isEmpty()) { 50 info("当前请求参数打印:"); 51 print(request.getParameterMap(), "参数"); 52 } 53 } catch (Exception e) { 54 error("MVC业务处理-**异常:", e); 55 } 56 info("*******************MVC业务处理结束**********************"); 57 58 return true; 59 } 60 61 @Override 62 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 63 64 info("*******************一个MVC 视图渲染开始**********************"); 65 66 try { 67 info("执行业务逻辑代码耗时:【{}】", TimeUtil.formatTime(new Date().getTime() - startTimeThreadLocal.get())); 68 String requestURL = request.getRequestURI(); 69 info("当前请求的URL:【{}】", requestURL); 70 71 if (modelAndView != null) { 72 info("即将返回到MVC视图:{}", modelAndView.getViewName()); 73 74 if (modelAndView.getView() != null) { 75 info("返回到MVC视图内容类型ContentType:{}", modelAndView.getView().getContentType()); 76 } 77 78 if (!modelAndView.getModel().isEmpty()) { 79 80 info("返回到MVC视图{}数据打印如下:", modelAndView.getViewName()); 81 print(modelAndView.getModel(), "返回数据"); 82 } 83 } 84 } catch (Exception e) { 85 error("MVC 视图渲染-**异常:", e); 86 } 87 88 info("*******************一个MVC 视图渲染结束**********************"); 89 } 90 91 @Override 92 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 93 94 try { 95 String requestURL = request.getRequestURI(); 96 info("MVC返回请求完成URL:【{}】", requestURL); 97 info("MVC返回请求完成耗时:【{}】", TimeUtil.formatTime(new Date().getTime() - startTimeThreadLocal.get())); 98 if (ex != null) { 99 info("MVC返回请求发生异常:", ex.getMessage());100 error("异常信息如下:", ex);101 }102 } catch (Exception e) {103 error("MVC完成返回-**异常:", e);104 }105 106 info("##############################【一个MVC完整请求完成】##############################");107 }108 109 private void print(Map<String, ?> map, String prefix) {110 if (map != null) {111 Set<String> keys = map.keySet();112 Iterator<String> iter = keys.iterator();113 while (iter.hasNext()) {114 115 String name = iter.next();116 if (name.contains("org.springframework.validation.BindingResult")) {117 continue;118 }119 120 String value = "";121 try {122 value = mapper.writeValueAsString(map.get(name));123 } catch (Exception e) {124 error("转换参数【{}】发生异常:", name, e);125 }126 info("{} \"{}\": {}", prefix, name, value);127 }128 }129 }130 }
原标题:Spring框架下的 “接口调用、MVC请求” 调用参数、返回值、耗时信息输出
关键词:Spring
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。