我正在使用Spring框架,Jersey框架的電子商務企業J2EE應用程序來分配每個事務的一個唯一的ID。目前我們正在記錄所有事務(通過消費隊列中的消息/通過Web服務請求創建的事務)。如何使用的logback和SLF4J
比方說,我在我的組件加工時失敗的消息。我想獲取該事務的所有日誌(所有日誌級別信息,調試,錯誤...)。目前我正在查看線程名稱以確定該事務的所有日誌。我不想長期依賴這個,因爲在特定的時間點之後線程名稱可能是相同的。
2016年7月14日02:45:50716 [使用DefaultMessageListenerContainer-3] DEBUG SomeClass的 - someMethod1() - 方法條目
2016年7月14日02:45:50724 [使用DefaultMessageListenerContainer-3] SomeClass1 - 插入的行someMethod2()編號:[1]
2016年7月14日02:45:50724 [使用DefaultMessageListenerContainer-3] DEBUG SomeClass的 - someMethod1() - 方法退出
是否有可能,我可以有日誌,像這樣的東西
2016年7月14日02:45:50716 [sometransactionnbr] [使用DefaultMessageListenerContainer-3] DEBUG SomeClass的 - someMethod1() - 方法入口
2016年7月14日02:45:50724 [sometransactionnbr] [使用DefaultMessageListenerContainer-3] SomeClass1 - someMethod2()插入的行數 :[1]
2016年7月14日02:45:50724 [sometransactionnbr] [默認MessageListenerContainer的-3] DEBUG SomeClass的 - someMethod1() - 方法退出
怎麼可以這樣 「sometransactionnbr」 很容易在不改變代碼,每次我都寫方法添加?
我沒有看到之前MDC,但沒有想到的是整個線程的線程使用相同的背景。關於應用程序服務器重用線程,這是可能的。我在日誌裏看到了相同的線程名稱,在這種情況下我如何處理上下文。值會改變,因爲我在業務方法開始時生成了不同的事務ID? – daemon54
@ daemon54 ...是的,如果在業務方法的開始處設置此值,txID將始終更改。然而,使用方法刪除這樣的值總是一個很好的習慣:在業務方法結尾處的'MDC.remove()','finally'塊內......參見上面的示例... –
甜。這有幫助。謝謝。 – daemon54