首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log4j中“ThreadContext”的替代方案

log4j中“ThreadContext”的替代方案
EN

Stack Overflow用户
提问于 2015-11-25 13:42:21
回答 1查看 5.5K关注 0票数 4

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-25 13:57:19

您可以直接使用MDC (映射诊断上下文)。有关更多详细信息,请参阅这里。还可以看到这个示例如何使用它。

基本上,您将使用以下方法设置属性:

代码语言:javascript
复制
MDC.put("userName", "test");

然后,在记录器中可以记录这些信息,如下所示:

代码语言:javascript
复制
#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配置,则可以为该用户配置一个带有过滤器的单独的附录,如下所示:

代码语言:javascript
复制
<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>

然后,只为该附录启用记录器:

代码语言:javascript
复制
<logger name="com.example.Clazz" additivity="false">
    <level value="info" />
    <appender-ref ref="Test"/>
</logger>

这样,您就可以看到只与用户test相关的日志。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33918040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档