springBoot feign请求日志切面

简介: springBoot feign请求日志切面

import com.fasterxml.jackson.databind.DeserializationFeature;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.SerializationFeature;

import lombok.extern.slf4j.Slf4j;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.Signature;

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.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;


import java.lang.reflect.Method;

import java.util.List;


@Component
@Aspect
@Slf4j
public class FeignLogAdvice {


   @Pointcut("execution(* com.xxx.xxx.*Feign.*(..))")

   public void logPointCut() {

   }


   @Around("logPointCut()")

   public Object doAround(ProceedingJoinPoint pjp) throws Throwable {

       long start = System.currentTimeMillis();

       Object result = pjp.proceed();

       Signature sig = pjp.getSignature();

       Method method = ((MethodSignature) pjp.getSignature()).getMethod();

 String url = method.getAnnotation(PostMapping.class) != null
                       ? method.getAnnotation(PostMapping.class).value()[0]

                        : method.getAnnotation(GetMapping.class).value()[0];

 log.info("feign请求结束,本次请求耗时:{}ms, url:{}, params----------:{}, result-----------:{} ",

           System.currentTimeMillis() - start, url, printObj(pjp.getArgs(), url), printObj(result, url));

       return result;

   }


   private final ObjectMapper objectMapper = new ObjectMapper()

           .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

           .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);


   private Object printObj(Object o, String url){

           return maskFeignUrls.contains(url) ? Base64Utils.encode(objectMapper.writeValueAsBytes(o)) : o;

   }


   @Value("#{'${maskFeignUrls:}'.split(',')}")

   private List<String> maskFeignUrls;

}

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
JavaScript 前端开发 Java
springboot从控制器请求至页面时js失效的解决方法
springboot从控制器请求至页面时js失效的解决方法
15 0
springboot从控制器请求至页面时js失效的解决方法
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
42 0
|
1月前
|
XML Java 数据格式
【二十九】springboot整合logback实现日志管理
【二十九】springboot整合logback实现日志管理
58 1
|
1月前
|
JavaScript 前端开发
springboot+layui从控制器请求至页面时js失效的解决方法
springboot+layui从控制器请求至页面时js失效的解决方法
16 0
|
2月前
|
监控 IDE Java
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
45 0
|
1天前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
|
2天前
|
机器学习/深度学习 负载均衡 Java
【SpringBoot系列】微服务远程调用Open Feign深度学习
【4月更文挑战第9天】微服务远程调度open Feign 框架学习
|
3天前
|
安全 Java Maven
[AIGC] Spring Boot中的切面编程和实例演示
[AIGC] Spring Boot中的切面编程和实例演示
|
5天前
|
Web App开发 前端开发 Java
SpringBoot之请求的详细解析
SpringBoot之请求的详细解析
21 0
|
1月前
|
SQL NoSQL Java
【七】springboot整合AOP实现日志操作
【七】springboot整合AOP实现日志操作
42 0