use*_*655 4 java logging log4j threadcontext log4j2
我一直在研究一个使用log4j2的项目,在这个项目中我使用ThreadContext.现在我回到使用log4j(1),它不提供ThreadContext.ThreadContext有什么好的选择吗?谷歌搜索还没有给我任何好的想法,所以我希望这里有人可能有一些意见.
您可以直接使用MDC(映射诊断上下文).有关详细信息,请参见此处 另请参阅此示例以了解如何使用它.
基本上,您将使用以下方法设置属性:
MDC.put("userName", "test");
Run Code Online (Sandbox Code Playgroud)
然后在记录器中,您可以记录以下信息:
#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
Run Code Online (Sandbox Code Playgroud)
或者,如果使用xml配置,则可以为该用户配置带有过滤器的单独appender,例如:
<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>
Run Code Online (Sandbox Code Playgroud)
然后只为该appender启用一个记录器:
<logger name="com.example.Clazz" additivity="false">
<level value="info" />
<appender-ref ref="Test"/>
</logger>
Run Code Online (Sandbox Code Playgroud)
这样您就可以看到仅与用户相关的日志test
.
归档时间: |
|
查看次数: |
3170 次 |
最近记录: |