2017-08-21 3 views
-1

Angenommen, ich habe drei Klassen A, B und C, die in separaten Threads (tA, tB und tC) arbeiten und alle von ihnen haben auch ihre eigene Instanz Logger.Java: Logging für mehrere Threads mit Log4j2

Jetzt habe ich ein Chaos in der Ausgabe, weil es keine Reihenfolge in den Aufzeichnungen der drei Klassen gibt. Gibt es eine Möglichkeit, die Loggings in der Reihenfolge ihres Auftretens zu sortieren?

Zum Beispiel:

class A { 
    public static final Logger LOGGER = LoggerFactory.getLogger(A.class); 

    public void start() { 
     LOGGER.info("TestA"); 
     LOGGER.info("TestA"); 
     LOGGER.info("TestA"); 
    } 
} 

class B { 
    public static final Logger LOGGER = LoggerFactory.getLogger(B.class); 

    public void start() { 
     LOGGER.info("TestB"); 
     LOGGER.info("TestB"); 
     LOGGER.info("TestB"); 
    } 
} 

class A { 
    public static final Logger LOGGER = LoggerFactory.getLogger(C.class); 

    public void start() { 
     LOGGER.info("TestC"); 
     LOGGER.info("TestC"); 
     LOGGER.info("TestC"); 
    } 
} 

Ausgang:

TestA 
TestA 
TestB 
TestB 
TestA 
TestC 
TestC 
TestB 
TestC 

Was ich will, ist:

TestA 
TestA 
TestA 
TestB 
TestB 
TestB 
TestC 
TestC 
TestC 
+0

Was meinst du, es gibt keine Reihenfolge? Fügen Sie Ihrer Protokollausgabe keine Zeitstempel hinzu? Und Threads per Definition laufen async voneinander ab, das ist ihr Zweck. Bitte veröffentlichen Sie ein Beispiel für Ihre Ausgabe und wie die Ausgabe angezeigt werden soll. – Tschallacka

+0

Wenn Ihre Anforderung serielle Ausführung und somit serielle Protokolle sind, dann verwenden Sie Threading nicht, führen Sie sie sequentiell wie 'new A(). Start(); new B(). start() 'so weiter –

Antwort

1

Da die Protokollierung definitionszeitbasiert ist, ist es gar nicht machen Sinn zu versuchen zu denken, dass man so etwas erreichen kann (naja, ohne zusätzliche Arbeit natürlich).

Sie können thread ID dem Protokollierungslayout hinzufügen. Dann können Sie andere Tools verwenden (z. B. grep), um die Protokollierung für die spezifischen Threads zu isolieren, die Sie sehen möchten, oder sogar das Protokoll nach der Thread-ID sortieren, die Ihnen die Protokolle für jeden Thread der Reihe nach liefert.

Verwandte Themen