当前位置: 首页 > news >正文

项目生成日志链路id,traceId

Trace

1. 注册filter

package com.sc.account.config;import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<TraceFilter> traceFilterRegistration() {FilterRegistrationBean<TraceFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new TraceFilter());registration.addUrlPatterns("/*");registration.setName("TraceFilter");registration.setOrder(100011); // 可设置优先级return registration;}
}

2.创建注册的filter

package com.sc.account.config;import cn.hutool.core.util.IdUtil;
import com.common.result.TraceUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class TraceFilter  extends OncePerRequestFilter {public static  Logger logger = LoggerFactory.getLogger(TraceFilter.class);@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {String tranceId = IdUtil.fastSimpleUUID();TraceUtils.setTraceId(tranceId);logger.info("请求路径start:{}", request.getRequestURI());long start = System.currentTimeMillis();try {filterChain.doFilter(request, response);} finally {long end = System.currentTimeMillis();logger.info("请求end:{},耗时:{}", request.getRequestURI(),(start - end));TraceUtils.removeTraceId();}}
}

3.ControllerLogAspect 打印请求 参数 和返回值

package com.sc.account.config;import cn.hutool.json.JSONUtil;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import java.util.LinkedHashMap;
import java.util.Map;@Aspect
@Component
@Order(10002)
public class ControllerLogAspect {
private Logger loger =  LoggerFactory.getLogger(ControllerLogAspect.class);@Around("execution(* com.sc.account.domain.index.controller..*.*(..))")public Object around(ProceedingJoinPoint joinPoint){long start = System.currentTimeMillis();MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();Object result = null;try {loger.info("接口方法:{},{}",methodSignature.getDeclaringTypeName(),methodSignature.getName());Map<String, Object> logParamMap = new LinkedHashMap<>();String[] parameterNames = methodSignature.getParameterNames();Object[] args = joinPoint.getArgs();for (int i = 0; i < args.length; i++) {String parameterName = parameterNames[i];Object parameterValue = args[i];logParamMap.put(parameterName, parameterValue);}loger.info("接口入参:{}", JSONUtil.toJsonStr(logParamMap));result = joinPoint.proceed();return result;} catch (Throwable e) {throw new RuntimeException(e);}finally {loger.info("方法返回值:{}",JSONUtil.toJsonStr(result));}}}

4. logback.xml加上

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder charset="UTF-8"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [traceId:%X{traceId}] %-5level %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder>
</appender>

相关文章:

  • 使用 Semantic Kernel 快速对接国产大模型实战指南(DeepSeek/Qwen/GLM)
  • 家政平台派单系统设计与实现详解
  • Unity-Shader详解-其四
  • BUUCTF——Mark loves cat
  • CloudCompare 中 ccDrawableObject
  • 健康养生:从微小改变开始
  • 2025系统架构师---论软件可靠性设计范文
  • yolo 用roboflow标注的数据集本地训练 kaggle训练 comet使用 训练笔记5
  • 从零开始学Python:开启编程新世界的大门
  • C++ 适配器模式详解
  • uniapp 云开发全集 云数据库
  • 11.施工监测
  • 【项目】基于ArkTS的网吧会员应用开发(1)
  • NHANES指标推荐:ZJU index
  • 作者新游戏1.1
  • 什么是外联模板(extern template)?
  • 解锁现代健康密码:科学养生新主张
  • Qt中的UIC
  • 【机器学习-线性回归-5】多元线性回归:概念、原理与实现详解
  • 数据库的二级索引
  • 泰国培训十万网络安全人员加强网络防御打击电诈
  • 沙发上躺赢又如何?告别冠军绝缘体的凯恩,要开始收割荣誉了
  • 多地政府机关食堂五一“开门迎客”:怎么看这场“宠粉”大戏
  • 体坛联播|拜仁遭绝平未能提前夺冠,刘翔钻石联赛纪录作古
  • 巴菲特执掌60年,伯克希尔市值如何增长5.5万倍?详解五大经典投资案例
  • “五一”假期国铁集团计划日均开行旅客列车超1.2万列