LOG4J2: Mehrere Logger für mehrere Appender mit unterschiedlichen Protokollierungsstufen

Was ich versuche zu tun, ist ziemlich einfach:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="Console">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <File name = "hibernateFile" fileName = "${artifactId}/logs/hibernate.log"> 
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>

     <File name = "springFile" fileName = "${artifactId}/logs/spring.log"> 
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>

    <File name = "rootFile" fileName = "${artifactId}/logs/root.log"> 
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>        

  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="rootFile"/>
    </Root>

    <Logger name ="org.springframework" level = "debug"> 
        <AppenderRef ref = "Console" level = "info"/>
        <AppenderRef ref = "springFile" level = "debug"/>
    </Logger>

     <Logger name ="org.hibernate" level = "debug"> 
        <AppenderRef ref = "Console" level ="info"/>
        <AppenderRef ref = "hibernateFile" level = "debug"/>
    </Logger>

  </Loggers>
</Configuration>

Ich möchte, dass nur wichtige Nachrichten auf meinem Konsolen-Appender angezeigt werden, während detaillierte Nachrichten an die Datei-Appender weitergeleitet werden.

Ich möchte den Appender jedoch nicht selbst filtern, da ich dort möglicherweise einige Debugging- oder Trace-Meldungen weiterleiten möchte (z. B. wenn ich mich in der Entwicklung befinde).

DasApache FAQ schlägt vor, dass ich nur filtern kann, indem ich denAppenderRef, aber ich habe es versucht, wie in der obigen XML-Datei beschrieben - und es leitet die Meldungen auf DEBUG-Ebene weiterhin an die Konsole weiter.

Ich habe auch versucht, dem @ einen ThresholdFilter hinzuzufügAppenderRef, aber das filtert es auch nicht.

 <Logger name ="org.hibernate" level = "debug"> 
    <AppenderRef ref = "Console">
         <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    </AppenderRef>
    <AppenderRef ref = "hibernateFile" level = "debug"/>
</Logger>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage