package com.fdkankan.common.aop; import com.alibaba.fastjson.JSON; import com.fdkankan.common.constant.LogFormatConstant; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @Component @Aspect @Slf4j public class FeignInterceptor { // 切入点表达式 @Pointcut("execution(* com.fdkankan.*.feign..*.*(..))") public void privilege() { } @Around("privilege()") public Object around(ProceedingJoinPoint pjp) throws Throwable { // 获取类名 String className = pjp.getTarget().getClass().getName(); // 获取执行的方法名称 String methodName = pjp.getSignature().getName(); // 获取参数名称 String[] parameterNamesArgs = ((MethodSignature) pjp.getSignature()).getParameterNames(); // 定义返回参数 Object result = null; // 获取方法参数 Object[] args = pjp.getArgs(); StringBuilder params = new StringBuilder(); for(int i = 0; i < parameterNamesArgs.length; i++){ params.append(",").append(parameterNamesArgs[i]).append("=").append(args[i]); } log.info(LogFormatConstant.FEIGN_LOG_START, className, methodName, params.substring(1)); // 执行目标方法 result = pjp.proceed(); log.info(LogFormatConstant.FEIGN_LOG_END, className, methodName, JSON.toJSONString(result)); return result; } }