Ich arbeite an einem E-Commerce-Unternehmen j2ee Anwendung mit Spring-Framework, Jersey-Framework. Momentan protokollieren wir alle Transaktionen (Transaktionen, die durch den Konsum von Nachrichten aus der Warteschlange/über Web-Service-Anfragen erstellt wurden).Wie eine eindeutige ID für jede Transaktion mit Logback und slf4j zuweisen
Nehmen wir an, ich habe eine Nachricht, die bei der Verarbeitung in meiner Komponente fehlgeschlagen ist. Ich möchte alle Protokolle (alle Log-Level-Informationen, Debug, Fehler ...) für diese Transaktion erhalten. Momentan schaue ich mir den Thread-Namen an, um alle Protokolle für diese Transaktion zu bestimmen. Ich möchte mich nicht lange darauf verlassen, da es möglich ist, dass die Thread-Namen nach einem bestimmten Zeitpunkt gleich sein können.
2016-07-14 02: 45: 50.716 [DefaultMessageListenerContainer-3] DEBUG Someclass - someMethod1() - Methode Eintrag
2016-07-14 02: 45: 50.724 [DefaultMessageListenerContainer-3] SomeClass1 - someMethod2() Anzahl der Zeilen eingefügt: [1]
2016.07.14 02: 45: 50.724 [DefaultMessageListenerContainer-3] DEBUG Someclass - someMethod1() - Methode Beenden
Ist es möglich, dass ich Protokolle mit so etwas wie diese
2016-07-14 02 haben kann: 45: 50.716 [sometransactionnbr] [DefaultMessageListenerContainer-3] DEBUG Someclass - someMethod1() - Methode Eintrag
2016.07.14 02: 45: 50.724 [sometransactionnbr] [DefaultMessageListenerContainer-3] SomeClass1 - someMethod2() Anzahl der Zeilen eingefügt : [1]
2016.07.14 02: 45: 50.724 [sometransactionnbr] [Standard MessageListenerContainer-3] DEBUG Someclass - someMethod1() - Methode Ausfahrt
Wie kann das "sometransactionnbr" einfach ohne Code für jede Methode zu ändern hinzugefügt werden, die ich geschrieben habe?
I MDC sah vor, aber nicht glaube, dass der gesamte Thread Thread den gleichen Kontext verwendet. Und bezüglich der Wiederverwendung von Threads durch den Anwendungsserver ist das möglich. Ich habe dieselben Thread-Namen in Protokollen gesehen. Wie kann ich in einer solchen Situation mit dem Kontext umgehen? Wird sich der Wert ändern, da ich zu Beginn der Geschäftsmethode eine andere Transaktions-ID generiert habe? – daemon54
@ daemon54 ... Ja, die txID wird immer geändert, wenn ein solcher Wert am Anfang der Geschäftsmethode gesetzt ist. Es ist jedoch immer eine gute Methode, diesen Wert mit der Methode 'MDC.remove()' am Ende der Geschäftsmethode innerhalb eines 'finally'-Blocks zu entfernen ... siehe mein Beispiel oben ... –
Sweet. Das hilft. Vielen Dank. – daemon54