log4j2中配置logId唯一标识来标记同一个请求

时间:2021-06-22 21:51:15
在项目的开发过程中,对于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完全贯穿起来。