簡體   English   中英

Log4j2.xml 中的 RegexFilter 未按預期過濾日志

[英]RegexFilter in Log4j2.xml not filtering logs as expected

我似乎無法讓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>

這是我們的日志 output 的示例,但不知何故,來自這個 package orgName.package1的日志沒有獲取正則表達式,因為我仍然可以在控制台中看到來自這個 package 的日志。

[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 [] ...

因為當我用普通的.*替換正則表達式時,來自 package orgName.package1的 output 未顯示在控制台中。

ThreadContextMapENV的值是local ,所以我期望日志 output 是... ENV=local...確實如此,如控制台所示。 但是這個日志不知何故沒有被正則表達式檢測到。

是否有我錯過的設置或配置? 或者也許我寫錯了正則表達式? 但是我在 regex101.com 上仔細檢查了我的正則表達式,我寫的測試用例通過了,這是一個示例

我明白為什么RegexFilter不起作用,這是因為我試圖在記錄器而不是消息上應用正則表達式。

RegexFilter旨在對消息應用正則表達式,而不是與記錄器相關的詳細信息(類型等)

我引用了這篇與我的問題非常相似的 StackOverflow 帖子

希望這對遇到此問題的任何人都有幫助,干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM