springboot-aop日志打印

守給你的承諾、 提交于 2019-11-27 12:01:37
package com.cinc.ecmp.client;

import com.cinc.ecmp.enums.BackResultEnum;
import com.cinc.ecmp.exception.BasException;
import com.cinc.ecmp.utils.JsonUtil;
import com.cinc.ecmp.vo.BackResult;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;

/**
 * @Author: hhr
 * @Despriction:  调用其他服务的日志打印
 * @CreatedTime: 2019/8/13 14:01
 * @ModifyBy:
 * @ModifyTime:
 * @ModifyDespriction:
 * @Version: V1.0.0
 */
@Slf4j
@Component
@Aspect
public class ClientLogRecordAspect {

    private final String pointCutStr = "execution(* com.cinc.ecmp.client..*.*(..))";

    /**
     * 定义切点
     */
    @Pointcut(pointCutStr)
    public void executeService(){

    }

    @Before("executeService()")
    public void doBefore(JoinPoint point) throws Throwable{

        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        //从切面织入点处通过反射机制获取织入点处的方法
        MethodSignature signature = (MethodSignature) point.getSignature();
        String declar = signature.getName();
        //获取切入点所在的方法
        Method method = signature.getMethod();
        log.info("============ 请求{}/{}开始 start:============",request.getRequestURI(),declar);

        //获取请求的类名
        String className = point.getTarget().getClass().getName();
        //获取请求的方法名
        String methodName = method.getName();
        //请求的参数
        Object[] args = point.getArgs();
        //将参数所在的数组转换成json
        String params = JsonUtil.objectToJsonStr(args);

        log.info("{} 参数params:{}", declar,params);

    }


    @AfterReturning(value = pointCutStr,returning = "resultInfo")
    public void doAfterReturn(JoinPoint point,Object resultInfo) throws Throwable{

        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        //从切面织入点处通过反射机制获取织入点处的方法
        MethodSignature signature = (MethodSignature) point.getSignature();
        String declar = signature.getName();
        //获取切入点所在的方法
        Method method = signature.getMethod();

        log.info("{}返回参数params:{}",declar, JsonUtil.objectToJsonStr(resultInfo));

        BackResult backResult = (BackResult)resultInfo;

        if (null == backResult || !BackResultEnum.SUCCESS.getCode().equals(backResult.getCode())){
            throw new BasException("ERROR","调用" + declar + "失败");
        }

        log.info("============ 请求{}/{}结束 end ============" , request.getRequestURI(),declar);
    }


}

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!