package com.mryan.aop_mylog.utils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.UUID; import java.util.logging.Logger; @Aspect @Component public class LogAspect { private static Logger log = Logger.getLogger("LogAspect.class"); @Around("execution(* com.mryan.aop_mylog.controller..*.*(..))") @ResponseBody public Object logAround(ProceedingJoinPoint joinPoint) throws Exception { String uuid = UUID.randomUUID().toString();//用于串联起来出入日志 防止并发混乱 Object result = null; String className = joinPoint.getTarget().getClass().getSimpleName(); Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; String methodName = methodSignature.getName(); StringBuilder paramInSb = null; StringBuilder paramOutSb = null; Object[] args = joinPoint.getArgs(); if (args.length > 0) { paramInSb = new StringBuilder(); String[] argNames = methodSignature.getParameterNames(); paramInSb.append(className).append(".").append(methodName).append("-->").append(uuid).append("入参---->"); for (int i = 0; i < argNames.length; i++) { if ((!(args[i] instanceof MultipartFile)) && (!(args[i] instanceof HttpServletRequest)) && (!(args[i] instanceof HttpServletResponse) && (!(args[i] instanceof MultipartFile[])))) { paramInSb.append(argNames[i]).append(":"); // append(JSON.toJSONString(args[i])); } } log.info(paramInSb.toString()); } try { result = joinPoint.proceed(); paramOutSb = new StringBuilder(); paramOutSb.append(className).append(".").append(methodName).append("-->").append(uuid).append("出参:"); // .append(JSON.toJSONString(result)); log.info(paramOutSb.toString()); } catch (Exception e) { // log.error("Log-->方法执行异常"); throw e; } catch (Throwable throwable) { // log.error("Log-->方法执行错误", throwable); // throw new Exception(ResponseCode.FAILURE, "未知错误"); } return result; } }