2014-10-06 20 views
2

我用我的演員裏面阿卡LoggingAdapter情況進行記錄,但我有我從一個演員,這需要一個SLF4J Logger實例作爲參數調用一些庫代碼。如何將阿卡LoggingAdapter轉換爲SLF4J記錄器

有一種簡單的方法來轉換或包裹LoggingAdapter,這樣我可以把它傳遞給庫代碼爲SLF4J記錄器。

我可以手工編寫這樣一個包裝,但我認爲這聽起來像一個非常正常的用例,所以我認爲可能有一種方法可以做到這一點,我只是沒有運氣發現。

回答

1

我結束了創建一個包裝類,實現了SLF4J記錄器接口,並委託給包裹LoggingAdapter所有呼叫。 class可以在this project on bitbucket

0

你總是可以創建一個SLF4J記錄器與

Logger logger = LoggerFactory.getLogger(Foo.class); 

,並把它傳遞到您的圖書館。無論您是否使用Akka slf4j記錄器。

+0

我知道,但據我所知,這將創建一個阻塞記錄器instacne,或至少這將取決於所使用的slf4j實現。我認爲(糾正我是否存在錯誤)akka創建自己的日誌系統的主要原因是爲了使日誌異步,以便從演員調用是安全的。我真的很想重用這個,因爲我從我的演員調用庫代碼,並且知道日誌記錄是它執行的唯一潛在的阻止操作。 – 2014-10-08 07:59:13

+0

Akka slf4j記錄器只是在線下調用slf4j。也許你會獲得對底層slf4j的引用。該引用不會比使用LoggerFactory創建時的阻塞更小。這更像是一個問題,你的圖書館如何處理記錄。即雖然阿卡自己的日誌記錄系統中創建 – 2014-10-08 16:18:47

+0

日誌報表,是sendt雖然事件中sTREM,並通過一個演員應該做的實際登錄回升。這可能是akka.event.slf4j.Slf4jEventHandler類,它記錄到slf4j。這比直接創建一個sfl4j記錄器有兩個優點。它使異步日誌記錄,併爲此請求者將不必等待緩慢的記錄,它可以在另一個潛在的調度運行,從而避免被其他演員所用的調度飢餓問題,在該磁盤是緩慢的情況下, ,並且日誌阻塞了很長時間。 – 2014-10-10 07:13:34