在项目的开发过程中,对于log打印时,一次request到response的请求,以及到响应到客户端的数据的请求,我们希望都能够串起来,因此,需要有一个唯一id来标识,这里我们通过log4j2中的logId来实现。
Log4j2中包含一个类:ThreadContext(实际上是一个本地线程)
可以自己生成一个唯一id:比如:uuid
logId = uuid;
然后在过滤器或者拦截器之前设置:ThreadContext.put("logId", logId);
log4j2.xml中配置如下:
<Console name="console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="[LOGID:%X{logId}] %d{yyyy/MM/dd HH:mm:ss} [%p] %c{1} (%F:%L) %msg%n" />
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
</Console>即在pattern中添加{logId}来打印出logId的唯一标识。
PS:我们可以将logId通过response中设置header字段作为一个唯一标识,这样前端和服务端就通过logId完全贯穿起来。
Log4j2日志唯一标识实践
本文介绍如何在Log4j2中使用ThreadContext为每次请求生成唯一标识(logId),并将其贯穿整个请求过程,包括前端和服务端。通过在log4j2.xml配置文件中指定PatternLayout,可以在日志输出中包含该唯一标识。
1563

被折叠的 条评论
为什么被折叠?



