Log4j2 Filter bestimmten Ebene in apender
Welche filter sollte ich verwenden, um zu definieren, insbesondere level angemeldet sein, mit dem apender? Zum Beispiel:
java:
LOGGER.debug("Debug message");
LOGGER.info("Info message");
LOGGER.warn("Warn message");
LOGGER.error("Error message");
LOGGER.fatal("Fatal message");
log4j2.xml:
<Configuration>
<Appenders>
<Console name="info-stdout-message">
<PatternLayout pattern="[%logger{36}] %message %n" />
<ThresholdFilter level="info"/>
</Console>
<Console name="detailed-stdout-message">
<PatternLayout pattern="[%logger{36}] [%level] %message %n" />
</Console>
<File name="file-appender" fileName="logs/debug.log">
<PatternLayout pattern="%d{HH:mm:ss dd.mm} [%t] [%-5level] %logger{36} - %msg %n" />
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="file-appender" level="debug" />
<AppenderRef ref="info-stdout-message" level="info"/>
<AppenderRef ref="detailed-stdout-message" level="info"/>
</Root>
</Loggers>
</Configuration>
Die Datei-Ausgabe ist in Ordnung, aber in der Konsole habe ich das Ergebnis:
[application.Main] [INFO] Info message
[application.Main] Info message
[application.Main] [WARN] Warn message
[application.Main] Warn message
[application.Main] [ERROR] Error message
[application.Main] Error message
[application.Main] [FATAL] Fatal message
[application.Main] Fatal message
aber ich brauche info-stdout-message
appender zur Ausgabe nur INFO-Meldungen, während detailed-stdout-message
Ausgabe alle AUßER INFO. Also die Ausgabe in der Konsole sollte sieht wie folgt aus:
[application.Main] Info message
[application.Main] [WARN] Warn message
[application.Main] [ERROR] Error message
[application.Main] [FATAL] Fatal message
Kann nicht herausfinden, wie um zu verhindern, dass Filter Respekt Ebene der Vererbung. Ist es möglich, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktioniert:
Hier zwei Konsolen-appenders. Man meldet alle trace, debug-und info-Ebenen zu std_out, die andere protokolliert alle warn, error und fatal Ebenen zu std_err. Dies ist sehr nützlich z.B. in eclipse, da std_err wird rot dargestellt.
Dauerte es sehr lange, um herauszufinden, wie filter eine Reihe von LogLevels über die log4j2.xml Konfigurations-Datei.
Am Ende dieser arbeitete für mich :
In diesem Fall Log4J protokolliert alle Nachrichten, die von Ebene.TRACE-Level.DEBUG, alle Niveaus unterhalb von Niveau.DEBUG ignoriert werden.
Bitte überprüfen Sie alle log4j2 Filtermöglichkeiten, die bei https://logging.apache.org/log4j/2.0/manual/filters.html
Beispiel-Konfiguration fragment
Eigentlich, aus Ihrer Frage, es sieht aus wie Sie nicht möchten, dass zwei verschiedene appenders, aber zwei unterschiedliche Muster, die mit unter verschiedenen Umständen. Dafür sollten Sie nur verwenden eine PatternSelector.