Protokollierung paralleler Threads im Logback

8

Ich werde versuchen, eine kurze Beschreibung meines Selenium-Rahmens zu geben, damit ich mein Problem erklären kann.

Ich verwende Selenium 2 (aktuelle Version 2.3.1) + testNG 5.14

Ich habe die Datei testng.xml so eingerichtet, dass die Tests in der Testsuite parallel ausgeführt werden, nur zwei Instanzen

Für Protokollierungszwecke verwende ich logback (ich habe gelesen, das ist die nächstbeste Sache in der Log-Welt)

Mein Problem ist, dass ich beim Überprüfen der Protokollierung der Anwendung Folgendes bekomme:

  

18: 48: 58.551 [TestNG] INFO d.a.a.s.t.setup.TestConfiguration -   Abrufen eines zufälligen Benutzers aus dem Benutzerpool

     

18: 48: 58.551 [TestNG] INFO d.a.a.s.t.setup.TestConfiguration -   Abrufen eines zufälligen Benutzers aus dem Benutzerpool

     

18: 48: 58.551 [TestNG] DEBUG d.aa.a.s.t.setup.TestConfiguration -   DataSource für die Abarbeitung der DataBase anlegen

     

18: 48: 58.551 [TestNG] DEBUG d.aa.a.s.t.setup.TestConfiguration -   DataSource für die Abarbeitung der DataBase anlegen

     

18: 48: 58.552 [TestNG] DEBUG d.a.a.s.t.setup.TestConfiguration -   Starten der SQL-Abfrage

     

18: 48: 58.552 [TestNG] DEBUG d.a.a.s.t.setup.TestConfiguration -   Starten der SQL-Abfrage

     

18: 48: 59.613 [TestNG] TRACE d.a.a.s.t.setup.TestConfiguration - Abfrage   erfolgreich

     

18: 48: 59.613 [TestNG] TRACE d.a.a.s.t.setup.TestConfiguration - Abfrage   erfolgreich

Wie Sie sehen können, ist es unmöglich, den Unterschied zwischen den zwei Threads zu sehen, die gleichzeitig ausgeführt werden. Meine Frage ist, gibt es eine Möglichkeit, die Logbucheinstellungen so zu konfigurieren, dass sie auch eine Nummer oder Id hinzufügen, um jeden laufenden Thread zu identifizieren?

PD Nur für den Fall, dass es helfen könnte, sieht meine logback.xml -Datei wie folgt aus:

%Vor%

Danke für Ihre Hilfe =)

} Allheilmittel {

    
Panacea 09.08.2011, 18:03
quelle

3 Antworten

10

Logback Diagnosekontext zugeordnet (MDC) ist Ihr Freund. Es ermöglicht das Hinzufügen von Thread-lokalen Variablen, die verwaltet, zwischen Threads kopiert und mit einem Protokollierungsformat protokolliert werden können.

Aus der Dokumentation:

  

Eines der Entwurfsziele von Logback besteht darin, komplexe verteilte Anwendungen zu prüfen und zu debuggen. Die meisten verteilten Systeme in der realen Welt müssen gleichzeitig mit mehreren Clients arbeiten. In einer typischen Multithread-Implementierung eines solchen Systems werden verschiedene Threads unterschiedliche Clients behandeln. Ein möglicher, aber etwas entmutigter Ansatz, um die Protokollierungsausgabe eines Clients von einem anderen zu unterscheiden, besteht darin, für jeden Client einen neuen und separaten Protokollierer zu instanziieren. Diese Technik fördert die Verbreitung von Loggern und kann den Verwaltungsaufwand erhöhen.

     

Eine leichtere Technik besteht darin, jede Protokollanforderung, die einen bestimmten Client bedient, eindeutig zu markieren. Neil Harrison beschrieb diese Methode in dem Buch Patterns for Logging Diagnostic Messages in Pattern Languages ​​von Program Design 3, herausgegeben von R. Martin, D. Riehle und F. Buschmann (Addison-Wesley, 1997). Logback nutzt eine Variante dieser Technik, die in der SLF4J-API enthalten ist: Mapped Diagnostic Contexts (MDC).

     

Um jede Anfrage eindeutig zu stempeln, fügt der Benutzer Kontextinformationen in das MDC, die Abkürzung für den zugeordneten Diagnosekontext, ein. Die hervorstechenden Teile der MDC-Klasse sind unten gezeigt. Eine vollständige Liste der Methoden finden Sie im MDC javadocs .

    
Ceki 10.08.2011, 16:43
quelle
6

Zu Ihrer Information: Sie können die Thread-ID mit% thread ausgeben, wie in der Dokumentation unter Ссылка beschrieben:

%Vor%     
prule 25.10.2012 03:39
quelle
4

Wenn Sie eine Alternative zu den unvorhersehbaren Namen möchten, die Sie mit% thread bekommen, wie ich es normalerweise tue, können Sie einfache thread-lokale IDs verwenden. Es ist viel einfacher für die Augen. Dies funktioniert mit Logback ...

%Vor%

Dann fügen Sie diese einfache Zeile in Ihr Logback-XML ein:

%Vor%

Setze dein Muster so (notice "tid"):

%Vor%

Und Ihre Protokolle werden wie folgt aussehen:

%Vor%

Sie können dies mit jedem Logger tun, der benutzerdefinierte Erweiterungen unterstützt. Hoffe es hilft.

    
Jerico Sandhorn 01.10.2013 14:41
quelle