是否可以配置Log4j2,以便過濾器或其他組件可以過濾出在日誌中打印的某些值? (但應允許在同一線路的其它領域通過)在Log4j2中,是否可以根據密鑰從記錄器中篩選出某些鍵值對?
說出以下行出現在日誌
[operation=DONE, userName=junitUser, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca, 393ae7a0]], device=Device [id=12345, type=Pompom, info=Dot's Device]]], channel=null
[operation=DONE, userName=junitUser224, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca,393ae7a0]], device=Device [id=123456, type=Mamamia, info=tom's Device]]], channel=null
現在我可以過濾掉「username」的字段,這樣的方式在日誌中線現在不包含它如下所示?
[operation=DONE, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca, 393ae7a0]], device=Device [id=12345, type=Pompom, info=Dot's Device]]], channel=null
[operation=DONE, tenant=Tenant [tenantID=default], needDetails=1, message=BaseMsg [version=1.0, sdk=AppSDK [version=1.3, protocols=[4aac81ca,393ae7a0]], device=Device [id=123456, type=Mamamia, info=tom's Device]]], channel=null
這裏是我的log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="RollingFile" fileName="/Users/dunston/logs/app.log"
filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
<RegexFilter regex=".* zinger_log .*" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<pattern>%d %p %c{1.} [%t] %m%n</pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy />
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
我不確定這是否可能,而無需滾動自己的擴展。然而,它看起來像你的日誌數據結構,是嗎?如果是這樣,爲什麼不寫一個你會調用的方法,它會在登錄之前從數據結構中刪除用戶名? – Jeremy
@Jeremy謝謝你的迴應。我期望實現的一件事是「可配置性」的簡化。就像我可以允許最終用戶通過更改log4j2配置來允許/禁止某些字段,如果這樣的設施已經可以作爲包的一部分。我還開始過濾專門用於生成此類日誌的數據結構副本。可能通過log4j2中的ThreadContext獲取字段名稱,並在將其寫入滾動文件日誌之前過濾字段的鍵和值。不確定是否有其他優雅的方法可用? – user46743