2017-03-28 4 views
0

Gibt es eine Möglichkeit, jedes Protokoll in der Hierarchie von einem bestimmten Sohn auszuführen?Java SLF4J Hierarchieausführung

Zum Beispiel:

-Parent 
    -Son 
     -Son2 
  1. Ausführen Son.log ("message") würde Son log und Parent Protokoll ausführen.
  2. Das Ausführen von Son2.log ("Nachricht") würde Son2, Son und Elternprotokoll ausführen.

, dass der Code ist:

public class HelloWorld { 

    public static void main(String[] args) { 

     Logger parent = LoggerFactory.getLogger("parent"); 
     ((ch.qos.logback.classic.Logger) parent).setLevel(Level.DEBUG); 

     Logger son= LoggerFactory.getLogger("parent.son"); 
     son.debug("hello"); 
    } 
} 

Ausgang:

14:15:25.180 [main] DEBUG logger.son- Hello world.

gewünschte Ausgabe:

14:15:25.180 [main] DEBUG parent.son- Hello world. 14:15:25.180 [main] DEBUG parent- Hello world.

Dank.

+0

Was meinen Sie mit dem Ausführen jedes Protokolls in der Hierarchie? – sinu

+0

Ich meine: führen Sie Methode Logon Sohn1 erzwingt, Son1.log() und Parent.log() auszuführen, weil Eltern auf Sohn1 Hierarchie ist. – Lechucico

Antwort

1

So funktioniert es nicht. Die SLF4J Logger-Hierarchie kann nicht wie gewünscht verwendet werden (und nicht sein).

Grundsätzlich werden für jeden Logger, wenn Sie keine Einstellung definieren, die Einstellungen vom übergeordneten Objekt kopiert. In Ihrer Hierarchie ist die Protokollierungsstufe für für parent festgelegt und nichts ist für parent.son definiert. Die Protokollierungsstufe für parent.son wird also auch DEBUG sein. So werden alle Protokolle mit einem höheren oder niedrigeren Level als DEBUG für parent.son protokolliert. Wenn Sie die Protokollstufe für den Sohn auf TRACE setzen, hat das Vorrang vor dem DEBUG-Level der Eltern.

+0

Dann kann ich nicht sehen, was die Vorteile dieser Hierarchie sind, wenn Sie nur Einstellungen von Eltern kopieren und nichts anderes ausführen können. – Lechucico

+0

Warum möchten Sie dieselbe Protokollnachricht immer wieder wiederholen lassen? – sinu

+0

Ich habe es falsch verstanden, es tut mir leid. Wenn Sohn den übergeordneten Appender erbt, ist es wie "Ausführen der Parent-Logger-Funktion". Vielen Dank. – Lechucico