logback+MDC实现链路追踪

本文介绍了如何利用TraceId进行日志跟踪,通过在每个前端请求下生成唯一的TraceId,并将其存储在服务器日志中,以便于追踪程序执行路径和问题定位。文章详细讲解了如何在Spring AOP中实现TraceId的生成与注入,以及如何在Logback配置中设置输出格式,从而在控制台清晰地查看TraceId相关的日志信息。
摘要由CSDN通过智能技术生成

有什么用:

每一个前端请求下的所有的日志信息都有对应的一个TraceId,这个id会在我们服务器日志里,把他串联起来,方便查看程序运行,执行了什么操作,以及方便问题排查。

怎么用:

1.先引入lombok依赖,因为用到了slf4j中的MDC

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.16.10</version>
</dependency>

创建一个TraceId放到MDC变量中

可以用雪花算法生成,我使用的是mybatis-plus中带的雪花算法,大家可以按照自己的想法生成一个唯一值。


public class GetIdUtil{

    public static long generate() {
        long id = IdWorker.getId();
        return id;
    }
}

使用AOP实现

//此为spring aop知识,不懂的自己去了解
    @Pointcut("execution(public * com.example.test..*.*(..))")
    public void logPoincut() {
    }
// 配置class的环绕通知,使用在方法aspect()上注册的切入点
    @Around(value = "logPoincut()")
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        // 生成一个链路ID
        long traceId = GetIdUtil.generate();
        // 放置此ID入MDC
        MDC.put("traceId",traceId);
        //实际业务
        Object resultObj = joinPoint.proceed();
        try {  
            chain.doFilter(request,response);  
        } finally {  
            MDC.clear();//must be,threadLocal  
        }  
        return resultObj;
    }

配置logback的pattern来进行输出

注意:此处的traceId跟MDC.put中的keyyo对应上,这会打印到控制台。

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
	<encoder>
		<pattern>[%d{ISO8601}][%-5level]%X{traceId}[%t][%C]%X{fromServiceName} - %msg%n</pattern>
	</encoder>
</appender>

这样就结束了。有问题评论或私聊。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值