Kann Log4j2 so konfiguriert werden, dass die Filter oder einige andere Komponenten bestimmte Werte aus dem Protokoll herausfiltern können? (Sollte aber andere Felder in derselben Zeile durchlassen)In Log4j2, ist es möglich, bestimmte Schlüsselwertpaare aus dem Logger basierend auf dem Schlüssel herauszufiltern?
Sagen Sie die folgenden Zeilen im Protokoll erscheinen
[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
Jetzt kann ich das „username“ Feld so herauszufiltern, dass das Protokoll Linien enthalten es jetzt nicht wie unten gezeigt?
[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
Hier ist meine 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>
Ich bin mir nicht sicher, ob dies möglich ist, ohne eigene Erweiterungen zu rollen. Es sieht jedoch so aus, als ob Sie eine Datenstruktur protokollieren, ja? Wenn ja, warum nicht eine Methode schreiben, die Sie stattdessen aufrufen würden, die den Benutzernamen aus der Datenstruktur löscht, bevor Sie ihn protokollieren? – Jeremy
@ Jeremy Danke für die Antwort. Eine Sache, die ich erreichen wollte, war die einfache Konfigurierbarkeit. So könnte ich einem Endbenutzer erlauben, bestimmte Felder zu erlauben/zu verbieten, indem man die log4j2-Konfiguration ändert, wenn eine solche Einrichtung bereits als Teil des Pakets verfügbar war. Ich begann auch, eine Kopie der Datenstruktur zu filtern, um diesen Protokolltyp zu erzeugen. Übernehmen Sie die Feldnamen wahrscheinlich über ThreadContext in log4j2 und filtern Sie die Schlüssel und Werte der Felder, bevor Sie sie in ein laufendes Dateiprotokoll schreiben. Nicht sicher, ob andere elegante Ansätze verfügbar sind? – user46743