aop实现打印相关日志信息2

现拿现用, 切入点改改就能用

 

package xxx

import com.alibaba.fastjson.JSON;
import lombok.Data;
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.springframework.stereotype.Component;
import xxx.framework.exception.BusinessException;


/**
 * @author goujh
 * @date 2020/10/9 13:50
 */
@Component
@Aspect
@Slf4j
public class FeignAop {
    private final String pointcutFeign = "execution(* xxx.*(..))";
    @Pointcut(value = pointcutFeign)
    public void logFeign() {}


    @Around(value = "logFeign()")
    public Object aroundFeign(ProceedingJoinPoint joinPoint) {
        Object proceed = null;
        FeignInfo feignInfo = new FeignInfo();
        MethodSignature methodSignature = null;
        long start = System.currentTimeMillis();
        try {
            methodSignature = (MethodSignature) joinPoint.getSignature();
            feignInfo.setRequestClass(methodSignature.getDeclaringTypeName());
            // 调用方法
            feignInfo.setRequestMethod(methodSignature.getMethod().getName());
            // 请求数据
            feignInfo.setRequestParam(JSON.toJSONString(joinPoint.getArgs()));
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            proceed = joinPoint.proceed();
            feignInfo.setResponseResult(JSON.toJSONString(proceed));
            feignInfo.setResponseTime(System.currentTimeMillis() - start);
            log.info(
                    "\n=====================feign访问请求信息:===============================================================================\n" +
                    "=====================请求类: "+feignInfo.getRequestClass()+"\n" +
                    "=====================请求方法: "+feignInfo.getRequestMethod()+"\n" +
                    "=====================请求参数: "+feignInfo.getRequestParam()+"\n" +
                    "=====================响应结果: "+feignInfo.getResponseResult()+"\n" +
                    "=====================消耗时长: "+feignInfo.getResponseTime()+"毫秒\n" +
                    "===============================================================================================================");
        } catch (Throwable e) {
            feignInfo.setResponseTime(System.currentTimeMillis() - start);
            feignInfo.setErrorMessage(e.getMessage());
            log.info(
                    "\n=====================feign访问请求信息:===============================================================================\n" +
                    "=====================请求类:"+feignInfo.getRequestClass()+"\n" +
                    "=====================请求方法:"+feignInfo.getRequestMethod()+"\n" +
                    "=====================请求参数:"+feignInfo.getRequestParam()+"\n" +
                    "=====================响应结果:"+feignInfo.getResponseResult()+"\n" +
                    "=====================消耗时长:"+feignInfo.getResponseTime()+"毫秒\n" +
                    "=====================错误信息:"+feignInfo.getErrorMessage()+"\n" +
                    "===============================================================================================================");
            if (e.getCause() != null && e.getCause().getMessage() != null) {
                throw new BusinessException(e.getMessage() +" Caused by: " + e.getCause().getMessage());
            } else {
                throw new BusinessException(e.getMessage());
            }
        }
        return proceed;
    }
}
@Data
class FeignInfo{
    private String requestClass;
    private String requestMethod;
    private String requestParam;
    private String responseResult;
    private long responseTime;
    private String errorMessage;
}

 

posted @ 2021-09-26 09:42  双子家的咸蛋蛋  阅读(27)  评论(0编辑  收藏  举报