请求 ID 未登录移动到 log4j 1.2 的异步附加程序
Request ID not logged on moving to log4j 1.2's async-appender
我有一个 Web 应用程序,到目前为止一直在使用 log4j1.2 进行同步记录。我正在尝试移动它以使用异步附加程序(来自 log4j 1.2)。我写了一个 XML 文件 - log4j.xml 来初始化异步附加程序。但是,当我检查日志时,我发现请求的 ID 没有被记录(尽管到目前为止它曾经被记录)。经过一番调查后,我认为 MDC 中不再存在请求 ID 的(键,值)对。
- 是不是因为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>
使用 Async-appender,您需要从传递到 Async Appender 线程的 LoggingEvent 中读取 mdcCopy。我有一个自定义 PatternLayout,它用于尝试从当前线程的 MDC 中读取请求 ID 和此类值——本质上,它只适用于同步日志记录,因为生成应用程序线程的主线程正在将值设置到相应的 MDC 中.
Async-appender 线程的 MDC 没有设置(键,值)对,但传递给它的 LoggingEvents 在其 mdcCopy 中确实有(键,值)对。
我有一个 Web 应用程序,到目前为止一直在使用 log4j1.2 进行同步记录。我正在尝试移动它以使用异步附加程序(来自 log4j 1.2)。我写了一个 XML 文件 - log4j.xml 来初始化异步附加程序。但是,当我检查日志时,我发现请求的 ID 没有被记录(尽管到目前为止它曾经被记录)。经过一番调查后,我认为 MDC 中不再存在请求 ID 的(键,值)对。
- 是不是因为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>
使用 Async-appender,您需要从传递到 Async Appender 线程的 LoggingEvent 中读取 mdcCopy。我有一个自定义 PatternLayout,它用于尝试从当前线程的 MDC 中读取请求 ID 和此类值——本质上,它只适用于同步日志记录,因为生成应用程序线程的主线程正在将值设置到相应的 MDC 中.
Async-appender 线程的 MDC 没有设置(键,值)对,但传递给它的 LoggingEvents 在其 mdcCopy 中确实有(键,值)对。