2012-10-02 13 views
0

我在我的應用程序中使用SLF4jLogback。現在我有要求我的應用程序應該嵌入其他應用程序。這意味着應用程序可以在其他應用程序中用作庫。除Logger部分外,一切都按預期工作。我只是不知道如何完全禁用Logback(這是因爲用戶應該自帶記錄器實現)。我試圖找到信息,如果有可能運行Logback類似於「委託模式」,以允許其他SLF4j實現掛鉤,但我沒有找到任何東西。SLF4j和Logback中可嵌入的應用程序

另一種方法是編寫一個自定義類加載器,它在應用程序啓動時擺脫logback,但這非常複雜(如果沒有黑客從應用程序運行時從類加載器中刪除加載的類,afaik是不可能的)。

有沒有人看到有可能做到這一點,而不用在不同的模塊中分割我的應用程序?

+0

從彙編應用程序步驟中分離構建代碼步驟。後衛進入後者。 –

回答

0

在編譯時,你應該只在你的類路徑中有slf4j-api。

在運行時,您可以選擇在運行時類路徑中添加logback,並且slf4j將使用它。

如果其他應用程序使用例如log4j,他們需要添加slf4j-log4j而不是logback,以及slf4j-api和你的模塊。

如果他們使用java.util.logging,他們需要添加slf4j-jdk14而不是logback。

在這兩種情況下,您都可能想告訴他們使用哪些日誌類別,以便他們可以將其添加到log4j或java.util.logging配置中。

+0

感謝您的快速回答。不幸的是,我的類路徑中有Logback。我正在尋找一種方法來A)在應用程序運行時從類路徑中刪除Logback或B)禁用Logback,以便其他實現可以掛鉤。 –

+0

您的類路徑由應用程序決定,我認爲。你不能在(嵌入)應用程序啓動之前替換logback嗎? – greyfairer