zoukankan      html  css  js  c++  java
  • springboot-aop日志打印

    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);
        }
    
    
    }
    

      

  • 相关阅读:
    ndk的注意事项
    git
    centos 7 linux x64
    linuxGame:文明5汉化
    pycharm something
    linux soft
    jsfl脚本设置导出AS链接名遇到的奇怪问题
    jsfl调整笔刷的笔触和颜色
    [转]FINDSTR正则表达式小结
    [转]关于SVN的操作批处理示例
  • 原文地址:https://www.cnblogs.com/HHR-SUN/p/11361699.html
Copyright © 2011-2022 走看看