我正在創建一個小的Java框架,它將記錄它的事件。我不希望框架依賴於任何特定的日誌記錄實現(jul,commons logging,log4j,slf4j,logback等)。相反,我想讓我的客戶選擇他們喜歡的任何東西。如何分離日誌實現和API?
問題是 - 我該如何實現這種解耦?我的框架應該如何記錄它的事件?
我正在創建一個小的Java框架,它將記錄它的事件。我不希望框架依賴於任何特定的日誌記錄實現(jul,commons logging,log4j,slf4j,logback等)。相反,我想讓我的客戶選擇他們喜歡的任何東西。如何分離日誌實現和API?
問題是 - 我該如何實現這種解耦?我的框架應該如何記錄它的事件?
我認爲這很難實現,因爲您的代碼必須調用某些內容才能記錄信息和錯誤消息。我認爲你將不得不選擇一個(我推薦slf4j)並堅持下去 - 這似乎是其他人通常所做的。
我會包括支持AspectJ和Commons Logging。
slf4j旨在解決這個問題:它將API從日誌實現中分離出來。
slf4j本身不是日誌記錄實現。這取決於後端實施的存在。 Logback恰巧本機實現了slf4j API,但是還有log4j,java.util.Logging和其他的綁定。
在某個級別上,您需要必須有有一個API供您的客戶使用。你可能會把它變成現有的API之一,而不是寫你自己的。
我將添加我自己的評論,說這是其他框架中解決的問題,最值得注意的是Spring。 Spring 3.x已經支持Apache Commons Logging,它本身只是一個默認情況下附帶基本實現的日誌接口。 – 2011-01-07 18:18:39