前言
平时的测试打印出来的日志都是有顺序的,最近并发测试,打印出来的日志不好查看。
需要在打印的日志中,增加标识,方便测试随机查看请求情况。
无序的日志问题如下图:
一、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后的日志: