2011-08-18 49 views
3

我正在編寫一個庫,並使用sfl4j來處理日誌記錄。SLF4J最佳實踐

我認爲這是個好主意,只要每個人都可以提供它自己的實現,然後我的應用程序提供的日誌將被正確處理。

但我不知道我是否必須提供一個實現作爲傳遞依賴或不。

例:

如果我只規定:

<dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
    </dependencies> 

我的lib可以選擇實現的用戶,但如果他只是添加我的lib沒有讀取配置,它不會工作

否則,如果我提供了:

<dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
    </dependencies> 

我的lib將只是在向它添加依賴時正常工作,但如果用戶想使用其他slf4j,他將不得不排除我的。

你對此有何評論?

+0

這是一個maven問題嗎?如果是這樣,請標記爲 –

+0

謝謝,對我的我來說,這是一個普遍的問題,但在我的例子中,我使用maven。所以我應該標記它;) – Christophe

+1

當你說如果你不提供一個實現,它不會工作,你的意思是你的庫不工作或日誌記錄不工作? – Ceki

回答

12

從來沒有提供日誌實現。客戶端應用程序必須這樣做。另外,這將違反關注的分離。不要對未知客戶做任何假設。

+3

另請注意,從SLF4J 1.6.0版開始,如果在類路徑中找不到綁定,則slf4j-api將默認爲nop-implement。另見http://slf4j.org/manual.html#libraries – Ceki