提问人:user1079475 提问时间:10/4/2023 最后编辑:user1079475 更新时间:10/4/2023 访问量:38
Log4j2 无法读取 RoutingAppender 中的 ThreadConntext 变量
Log4j2 Can't read ThreadConntext variables in the RoutingAppender
问:
首先,我阅读了这个主题 Log4j 2 : 无法在 RollingFileAppender fileName 和 filePattern 中使用 ContextMapLookup 我准备了如下配置:
<Configuration name="configuration">
<Appenders>
<Routing name="routing_1">
<Routes>
<Route>
<RollingFile append="true"
fileName="logfile"
filePattern="logfile.${mdc:User}-${mdc:Channel}.%i.log"
name="routing_1">
<PatternLayout pattern="Thread=%tid [%X{MessageId}] %d %-11T %-5p [%c] - %m%n"/>
<DefaultRolloverStrategy max="20"/>
<Policies>
<SizeBasedTriggeringPolicy size="20000KB"/>
</Policies>
</RollingFile>
</Route>
</Routes>
</Routing>
</Appenders>
<Loggers>
<Logger additivity="true"
level="info"
name="org.hibernate.type">
<AppenderRef ref="routing_1"/>
</Logger>
</Loggers>
</Configuration>
它正在创建我尝试使用的文件,它导致了如下文件: 我已经附加了调试器,并发现在创建 PatternConverter 期间logfile.${mdc:User}-${mdc:Channel}.0.log, logfile.${mdc:User}-${mdc:Channel}.1.log (...)
%X{User}
%X{Channel}
logfile.%X-%X.0.log, logfile.%X-%X.1.log (...)
PatternParser::createConverter
PatternParser::finalizeConverter
PatternParser::parse
PatternProcessor::ctr
只有 4 条规则 {, , 和另外两个我不记得了},它们都没有处理子句。我发现这是问题所在,但我不知道如何在库过程中控制它。
奇怪的是,替换工作正常。%i
%d
%X
%X{MessageId}
PatternLayout's pattern
有什么帮助吗?
答:
0赞
user1079475
10/4/2023
#1
我设法揭开了这个谜团。
在元素中,我添加了一个属性,如下所示<Routes>
pattern
<Routes pattern="$${event:Level}">
我认为这意味着当 logEvent 具有指定的级别(始终如此)时,将选择和评估此路由。这为查找任何数字的任何上下文变量打开了大门。 可悲的是,关于如何使用这些的信息太少了......
评论