Wie kann ich mit log4j2 nur eine Ebene protokollieren?

Ich verwende log4j2 in meiner Anwendung.

Was ich möchte, ist, dass alles bis auf 'debug' zur Konsole geht, alles bis auf 'info' zu myapp.log und NUR 'info' zu 'myapp-audit.log'.

Der Grund dafür ist, dass INFO hauptsächlich aus erfolgreichen Änderungen an Daten besteht (z. B. "Benutzer erstellt", "Benutzer aktualisiert", "Benutzer gelöscht" usw.). If ist effektiv ein Audit-Protokoll von Datenänderungen.

Aber ich kann nicht herausfinden, wie es geht.

Wie erhalte ich NUR 'info', um mich bei 'myapp-audit.log' anzumelden? Hier ist meine aktuelle Konfiguration ...

<?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>

        <File name="LogFile" fileName="myapp.log">
            <PatternLayout
                pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>

        <File name="AuditFile" fileName="myapp-audit.log">
            <PatternLayout
                pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
    </appenders>

    <loggers>
        <root level="debug">
            <appender-ref ref="Console" level="debug" />
            <appender-ref ref="LogFile" level="info" />
            <appender-ref ref="AuditFile" level="info" /> <!-- I want ONLY 'info' here -->
        </root>
    </loggers>
</configuration>

Antworten auf die Frage(3)

Ihre Antwort auf die Frage