Sie können versuchen, einen benutzerdefinierten Log4J-Appender zu verwenden, der die Thread-ID als Parameter verwendet und Nachrichten basierend darauf filtert, welcher Thread sie aufruft. Erstellen Sie es im laufenden Betrieb, hängen Sie es an den Logger an.
Es gibt jedoch mehrere Probleme mit diesem Ansatz:
Ich schlage vor, dass Sie einen einfacheren Ansatz in Erwägung ziehen: Protokollieren Sie die Thread-ID in dieselbe Protokolldatei. Es ist schnell und einfach, Log4j hat eine% -Flag dafür. Später können Sie die Protokolldatei je nach Thread-ID grep / splitten.
Aktualisieren :
Tatsächlich haben Sie vielleicht einen einzigen benutzerdefinierten Appender, der Log-Dateien bei Bedarf öffnet, wenn ein neuer Thread einen Datensatz protokolliert (der Appender wird innerhalb dieses Thread-Kontexts ausgeführt, rufen Sie einfach Thread.currentThread (). getName ()). Aber Sie müssen alle üblichen Protokolldateiaufgaben (Rotation) neu implementieren oder für jede Datei an den Standardappender delegieren.
Ich habe eine Multithread-Anwendung, die jeden Thread in der Protokolldatei identifiziert (weiß nicht über mehrere Dateien, einzelne Datei zeigt mir Übereinstimmung), identifiziert den Thread automatisch durch das Protokollierungsframework, es ist Log4J
Bearbeiten: Es muss nichts im Code hinzugefügt werden. Sie müssen nur den Appender im Logger so konfigurieren, dass er [% Thread] enthält, um den Thread zu identifizieren, von dem aus Sie die aktuelle Nachricht protokollieren Beispiel stammt von log4net:
%Vor%
Hier finden Sie eine Liste anderer gängiger Java-Protokollierungs-Frameworks
In manchen Fällen ist es weniger wichtig, die Thread-Kennung zu kennen, als den Kontext der Ausführung zu kennen. Dies trifft insbesondere auf viele Threads und größere Anwendungen zu. Was tun Sie, wenn sich die Thread-ID ändert, der tatsächliche Ausführungskontext jedoch tatsächlich derselbe ist (wie jemand, der in den Thread-Pools erwähnt wird)? Ich würde lieber MDC (zugeordneten Diagnosekontext) verwenden, um die Ausführungskontext in Protokollen. Es ist besser, weil Sie kontrollieren, was der Kontext ist. Am Ende können Sie das Layout von Protokollen so einstellen, dass es MDC enthält und dann leicht herausfiltern, was relevant ist. Schauen Sie sich dieses Tool an, es macht eine Menge Dinge mit MDC.
Tags und Links java multithreading logging