springboot切面logdemo

96 阅读1分钟
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;
    }
}