|  | @ -0,0 +1,50 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.advice;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.databind.ObjectMapper;
 | 
	
		
			
				|  |  | import org.aspectj.lang.ProceedingJoinPoint;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.Around;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.Aspect;
 | 
	
		
			
				|  |  | import org.slf4j.Logger;
 | 
	
		
			
				|  |  | import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.cloud.sleuth.Tracer;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  | import org.springframework.web.context.request.RequestContextHolder;
 | 
	
		
			
				|  |  | import org.springframework.web.context.request.ServletRequestAttributes;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * Created by yeshijie on 2018/9/14
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @Aspect
 | 
	
		
			
				|  |  | @Component
 | 
	
		
			
				|  |  | public class HttpAdvice {
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private Tracer tracer;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ObjectMapper objectMapper;
 | 
	
		
			
				|  |  |     private Logger logger = LoggerFactory.getLogger(HttpAdvice.class);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Around("within(@org.springframework.web.bind.annotation.RestController *)")
 | 
	
		
			
				|  |  |     public Object process(ProceedingJoinPoint point) throws Throwable {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //保存入参
 | 
	
		
			
				|  |  |         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 | 
	
		
			
				|  |  |         tracer.getCurrentSpan().logEvent(objectMapper.writeValueAsString(request.getParameterMap()));
 | 
	
		
			
				|  |  |         //访问目标方法的参数:
 | 
	
		
			
				|  |  |         Object[] args = point.getArgs();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         Long strartTime = System.currentTimeMillis();
 | 
	
		
			
				|  |  |         Object returnValue = point.proceed(args);
 | 
	
		
			
				|  |  |         Long endTime = System.currentTimeMillis();
 | 
	
		
			
				|  |  |         //保存响应
 | 
	
		
			
				|  |  |         tracer.getCurrentSpan().logEvent(objectMapper.writeValueAsString(returnValue));
 | 
	
		
			
				|  |  |         //保存响应时间
 | 
	
		
			
				|  |  |         tracer.getCurrentSpan().logEvent("executeTime:"+(endTime - strartTime));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return returnValue;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |