Log4j2 无法读取 RoutingAppender 中的 ThreadConntext 变量

Log4j2 Can't read ThreadConntext variables in the RoutingAppender

提问人:user1079475 提问时间:10/4/2023 最后编辑:user1079475 更新时间:10/4/2023 访问量:38

问:

首先,我阅读了这个主题 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

有什么帮助吗?

Java 解析 日志记录 log4j2

评论


答:

0赞 user1079475 10/4/2023 #1

我设法揭开了这个谜团。 在元素中,我添加了一个属性,如下所示<Routes>pattern

<Routes pattern="$${event:Level}">

我认为这意味着当 logEvent 具有指定的级别(始终如此)时,将选择和评估此路由。这为查找任何数字的任何上下文变量打开了大门。 可悲的是,关于如何使用这些的信息太少了......