| | |
| | | package com.xiaopeng.trafficControl.config.log; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.xiaopeng.common.log.config.LogHeaderProperties; |
| | | 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.reflect.MethodSignature; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | 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; |
| | | import java.util.Arrays; |
| | | import java.util.Enumeration; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Feign 调用日志切面 |
| | |
| | | @Aspect |
| | | @Component |
| | | public class FeignLoggingAspect { |
| | | |
| | | @Autowired |
| | | private LogHeaderProperties logHeaderProperties; |
| | | |
| | | /** |
| | | * 拦截所有带 @FeignClient 注解的接口的所有方法 |
| | |
| | | |
| | | Object[] args = pjp.getArgs(); |
| | | String argsJson = safeToJson(args); |
| | | String headerStr = extractCurrentHeaders(); |
| | | |
| | | log.info("[Feign] >>> 调用开始 | method={} | args={}", fullMethod, argsJson); |
| | | if (headerStr != null) { |
| | | log.info("[Feign] >>> 调用开始 | method={} | headers={} | args={}", fullMethod, headerStr, argsJson); |
| | | } else { |
| | | log.info("[Feign] >>> 调用开始 | method={} | args={}", fullMethod, argsJson); |
| | | } |
| | | |
| | | long start = System.currentTimeMillis(); |
| | | try { |
| | |
| | | return "[序列化失败: " + obj.getClass().getSimpleName() + "]"; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 从当前请求上下文中提取请求头信息 |
| | | */ |
| | | private String extractCurrentHeaders() { |
| | | if (!logHeaderProperties.isEnabled()) { |
| | | return null; |
| | | } |
| | | try { |
| | | ServletRequestAttributes attrs = (ServletRequestAttributes) |
| | | RequestContextHolder.getRequestAttributes(); |
| | | if (attrs == null) return "{}"; |
| | | HttpServletRequest request = attrs.getRequest(); |
| | | List<String> names = logHeaderProperties.getNames(); |
| | | StringBuilder sb = new StringBuilder("{"); |
| | | boolean first = true; |
| | | if (names != null && !names.isEmpty()) { |
| | | for (String name : names) { |
| | | String value = request.getHeader(name); |
| | | if (value != null) { |
| | | if (!first) sb.append(", "); |
| | | first = false; |
| | | sb.append(name).append("=").append(value); |
| | | } |
| | | } |
| | | } else { |
| | | Enumeration<String> headerNames = request.getHeaderNames(); |
| | | while (headerNames != null && headerNames.hasMoreElements()) { |
| | | String name = headerNames.nextElement(); |
| | | String value = request.getHeader(name); |
| | | if (!first) sb.append(", "); |
| | | first = false; |
| | | sb.append(name).append("=").append(value); |
| | | } |
| | | } |
| | | return sb.append("}").toString(); |
| | | } catch (Exception e) { |
| | | return "{error: " + e.getMessage() + "}"; |
| | | } |
| | | } |
| | | } |