2015-10-24 62 views
1

我想在我的Spring集成實現中引入有效的日誌記錄。我已經有了記錄有效負載和標題的全局接線。然而,我們有很多服務激活器,它們有很多業務邏輯。我想在每個日誌中記錄重要的信息,如用戶標識,請求標識。我們正在使用SLF4J。 Spring集成流程中有多個由Spring集成管理的線程池執行程序。在Spring集成中使用MDC

我應該在每個方法調用之前使用AOP,我從消息頭中檢索用戶標識和請求標識,並將其設置在SLF4J MDC中?然後在方法執行結束後清除它。它會在finally塊中清除邏輯。這是一個正確的方法,否則這會造成性能瓶頸?不知道爲什麼在多線程SI流程中沒有對此進行討論,在沒有用戶信息的情況下調試日誌將變得非常困難。

如果有更好的方法,請建議。

回答

1

查看SecurityContextPropagationChannelInterceptor介紹in 4.2

請注意,它是ThreadStatePropagationChannelInterceptor的一個子類。

當消息傳遞給另一個線程時,您可以使用類似的技術來傳播/清除MDC。這比在該線程進行的每次調用時花費更少。

請注意,要傳播的信息如何與消息一起包裝在輕量級消息包裝器中。您也可以將信息存儲在郵件標題中。

如果想出一個通用的實現,請考慮contributing it to the framework

+0

謝謝,讓我試試看。我目前的Spring版本是3.x,因爲我們需要支持JDK 6.計劃升級到Spring 4.x.將嘗試併發布結果。 –

+0

現在我們被Spring 3.x困住了。所以實現aop來將用戶信息注入到標題的每個日誌中... –