Welchen Filter sollte ich verwenden, um bestimmte Ebene zu definieren, um mit apender protokolliert werden? Zum Beispiel:Log4j2 Filter bestimmte Ebene in Apender
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 Dateiausgabe ist in Ordnung, aber in der Konsole habe ich ein solches 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 benötigt appender, um nur INFO-Nachrichten auszugeben, während detailed-stdout-message
alle EXEPT INFO ausgibt. Die Konsolenausgabe sollte also wie folgt aussehen:
Kann nicht herausfinden, wie Filter verhindert werden, die Ebenenvererbung zu beachten. Ist es möglich, dies zu tun?
Gibt es eine Möglichkeit, es programmatisch zu tun, anstatt die Konfigurationsdatei die Filterstufe zu setzen? – testerjoe2