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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架