java Log4j2.xml中的RegexFilter未按预期筛选日志

qlvxas9a  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(244)

我似乎无法让RegexFilter工作。我已经设置了log4j2.xml文件如下:

<Console name="prodOutput" target="SYSTEM_OUT">
    <PatternLayout pattern="[%d] [Org Utility] -- [ITEM1=%X{ITEM1} ITEM2=%X{ITEM2} ITEM3=%X{ITEM3} USERID=%X{USERID} ENV=%X{ENV}]- [%t] %-5p %c %x - %m%n"/>
    <Filters>
        <RegexFilter regex=".*ENV=local.*" useRawMsg="false" onMatch="DENY" onMismatch="NEUTRAL"/>
    </Filters>
</Console>

<Loggers>

        <!-- switch off log output from these packages -->
        <Logger name="orgName.package1" level="debug" additivity="false">
            <appender-ref ref="prodOutput"/>
        </Logger>

        <!-- retain log output for other packages -->
        <Logger name="orgName" level="trace" additivity="false">
            <appender-ref ref="${sys:logger.out.type}"/>
        </Logger>
        <Root level="info" additivity="false">
            <appender-ref ref="${sys:logger.out.type}"/>
        </Root>

</Loggers>

下面是日志输出的一个示例,但不知何故,regex没有获取来自这个包orgName.package1的日志,因为我仍然可以在控制台中看到来自这个包的日志。

[2023-01-03 12:41:56,353] [Org Utility] -- [ITEM1=XX ITEM2=XX ITEM3=XX USERID=@ADMIN ENV=local]- [ForkJoinPool-1-worker-29] DEBUG orgName.executeRule [] ...

因为当我用平凡的.*替换regex时,来自包orgName.package1的输出没有显示在控制台中。
ThreadContextMapENV的值是local,所以我希望日志输出是... ENV=local ... &确实如此,如控制台中所示,但是这个日志不知何故没有被正则表达式检测到。
有什么设置或配置我错过了吗?或者也许我写错了正则表达式?但我已经在www.example.com上仔细检查了我的正则表达式regex101.com,我写的测试用例通过了,这里有一个sample

9gm1akwq

9gm1akwq1#

我理解为什么RegexFilter不起作用,这是因为我试图在日志记录器上应用正则表达式,而不是消息。
RegexFilter旨在对消息应用正则表达式,而不是对与记录器相关的细节(类型等)应用正则表达式
我引用了这个StackOverflow post,它与我的问题非常相似。
希望这能作为一个有帮助的指南,任何人遇到这个,干杯!

相关问题