替代 log4j 中的 'ThreadContext'

Alternative to 'ThreadContext' in log4j

我一直在做一个使用 log4j2 的项目,在这个项目中我使用了 ThreadContext。现在我回到使用 log4j (1),它不提供 ThreadContext。 ThreadContext 有什么好的替代方案吗? Google 搜索还没有给我任何好的想法,所以我希望这里有人可以提供一些意见。

您可以直接使用 MDC(映射诊断上下文)。请参阅 here for more details. Also see this example 了解如何使用它。

基本上您将使用以下方式设置您的属性:

MDC.put("userName", "test");

然后在记录器中,您可以记录如下信息:

#note the %X{userName} - this is how you fetch data from Mapped Diagnostic Context (MDC)
log4j.appender.consoleAppender.layout.ConversionPattern = %-4r [%t] %5p %c %x - %m - user: %X{userName}%n

或者如果使用 xml 配置,您可以为该用户配置一个带有过滤器的单独附加程序,例如:

<appender name="Test" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="my.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="[%d{HH:mm:ss.SSS}] %-8p [%-5t] %C{2}:%-12M - %m%n user: %X{userName}" />
        </layout>
        <filter class="org.apache.log4j.varia.StringMatchFilter">
                  <param name="StringToMatch" value=" user: test " />
                  <param name="AcceptOnMatch" value="true" />
          </filter>
    <filter class="org.apache.log4j.varia.DenyAllFilter"/>
    </appender>

然后仅为该附加程序启用记录器:

<logger name="com.example.Clazz" additivity="false">
    <level value="info" />
    <appender-ref ref="Test"/>
</logger>

这样您就可以看到仅与用户 test.

相关的日志