[英]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 未顯示在控制台中。
ThreadContextMap
中ENV
的值是local
,所以我期望日志 output 是... ENV=local...
確實如此,如控制台所示。 但是這個日志不知何故沒有被正則表達式檢測到。
是否有我錯過的設置或配置? 或者也許我寫錯了正則表達式? 但是我在 regex101.com 上仔細檢查了我的正則表達式,我寫的測試用例通過了,這是一個示例。
我明白為什么RegexFilter
不起作用,這是因為我試圖在記錄器而不是消息上應用正則表達式。
RegexFilter
旨在對消息應用正則表達式,而不是與記錄器相關的詳細信息(類型等)
我引用了這篇與我的問題非常相似的 StackOverflow 帖子。
希望這對遇到此問題的任何人都有幫助,干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.