我有一个 spring MVC 项目(不是 springboot )。我正在尝试使用 MDC 添加用于日志记录的traceId
(MDC.set("X_REQUEST_ID",uuid.randomuuid().tostring())
。现在我已经添加了在 Filter 类中设置变量(X_REQUEST_ID)的代码。在 log4j2.xml 中,我将模式添加为
%d{yyyy-MMM-dd HH:mm:ss.SSSSSS} [%X{X_REQUEST_ID}] [%t] %-5p %c
但是当我运行该项目时,其打印 [ ] 为 X_REQUEST_ID 这意味着没有值。
我已经测试了代码,但使用了 MDC.get("X_REQUEST_ID") 并且它的设置正确且可见,如代码中所示。
我正在使用 org.apache.log4j.MDC,下面是我的依赖项。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>
org.apache.log4j.MDC
是 Log4j 1 类,仅由 Log4j 1 使用。
org.apache.logging.log4j.ThreadContext
(参见文档):
try {
ThreadContext.put("X_REQUEST_ID", UUID.randomUUID().toString());
// your code
} finally {
ThreadContext.remove("X_REQUEST_ID");
}
备注:您可以考虑使用
log4j-1.2-api
桥(参见 迁移),它将把 MDC
调用转发到 ThreadContext
调用,但是 MDC
通常使用的次数很少,因此不值得额外的依赖。