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 @   双子家的咸蛋蛋  阅读(29)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示