java - 在 log4j 中替代 'ThreadContext'

标签 java logging log4j log4j2 threadcontext

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

最佳答案

您可以直接使用 MDC(映射诊断上下文)。参见 here更多细节。另见 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 相关的日志。

关于java - 在 log4j 中替代 'ThreadContext',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33918040/

相关文章:

java - Eclipse 无法解析插件 org.eclipse.wst.server.ui

ruby-on-rails - rails 日志。这是什么意思

spring - Tomcat 上的相同 Web 应用程序,每个应用程序具有不同的 log4j 配置

java - 我注意到 log4j2.xml 中某些属性前面的前缀 'sd:'——它们代表什么?

log4j - Log4j SyslogAppender是否支持MDC和NDC

java - 需要弄清楚如何处理稀疏矩阵

java - 创建 Vector 实例时未检查的警告

java - Log4j 2 - 停用流口水记录器

java - 在eclipse中执行jcuda程序时出错

java - 如何以编程方式将 AccessLogValve 添加到 Tomcat?