到目前为止,我有一个使用 log4j1.2 同步记录的 Web 应用程序。我正在尝试将其移动以使用 async-appender(来自 log4j 1.2)。我编写了一个 XML 文件 - log4j.xml 来初始化 async-appender。但是,当我检查日志时,我发现请求的 ID 没有被记录(尽管到目前为止它曾经被记录)。经过一番调查,我认为请求 ID 的(键,值)对不再存在于 MDC 中。
- 那是因为 async-appender 是一个单独的线程并且没有继承与主应用程序线程相同的键值对吗?
- 有没有办法可以在 MDC 中设置这些值,以便应用程序再次开始记录请求 ID?
log4j.xml 文件供参考:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="Async" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="FILE"/>
</appender>
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/log/directory/logFile"/>
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%-5p] %c %x - %m%n" />
</layout>
</appender>
<root>
<priority value="warn"/>
<appender-ref ref="Async"/>
</root>
</log4j:configuration>