并发日志:MDC应用

本文介绍了如何在并发测试中使用MDC(MappedDiagnosticContext)来标记日志,以便于追踪请求。通过在拦截器中添加MDC并配置日志文件,使得日志带上业务追踪ID,解决了日志无序的问题。
摘要由CSDN通过智能技术生成

前言
平时的测试打印出来的日志都是有顺序的,最近并发测试,打印出来的日志不好查看。
需要在打印的日志中,增加标识,方便测试随机查看请求情况。
无序的日志问题如下图:
在这里插入图片描述

一、MDC

参考博客:MDC词条来源

MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能,也可以说是一种轻量级的日志跟踪工具。

二、在拦截器中放入MDC

如果业务请求头有类似TranId的业务追踪id,可以不使用UUID。

       import org.slf4j.MDC;
       
       MDC.put("TraceId",tranId);

代码示例:

@Slf4j
@Component
public class CipherInterceptor implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 统计耗时
        if (log.isInfoEnabled()) {
            String tranId = UUID.randomUUID().toString().replace("-", "");
            MDC.put("TraceId",tranId);
            long reqStart = System.currentTimeMillis();
            chain.doFilter(request, response);
            long reqEnd = System.currentTimeMillis();
            long cost = reqEnd - reqStart;
            log.info("--- request-end 耗时 : {} ms ---", cost);
        } else {
            chain.doFilter(request, response);
        }
    }
 }

三、日志配置文件

在log配置文件中,我这边是log-back-spring.xml文件。
配置日志格式加上:[%X{TraceId}]
在这里插入图片描述
应用MDC后的日志:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*crzep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值