2010-11-15 309 views
5

我試圖刪除一些日誌記錄依賴關係,偶然發現城堡溫莎的日誌記錄設施。不過,我對我是否應該使用它持懷疑態度。城堡溫莎日誌記錄設施

public class MyClass 
{ 
    public Castle.Core.Logging.ILogger Logger { get; set; } 

    ... 
} 

溫莎的日誌記錄工具要求您將記錄器暴露爲屬性。這真的是一個好習慣嗎?我覺得我幾乎要打破封裝,因爲通常當我重用一個組件時,我不關心它的日誌記錄機制,我通常不希望看到它暴露。

如果我使用使用靜態類創建日誌的自定義包裝,我可以保持它的私密性。例如:

public class MyClass 
{ 
    private static MyCustomWrapper.ILogger Logger = LogManager.GetLogger(typeof(MyClass)); 

    ... 
} 

我搜索過的原因,我應該使用日誌記錄功能的網頁,但我只發現在如何使用它的文章,但不爲什麼我應該使用它。我覺得我錯過了這一點。記錄組件暴露出來有點嚇人。

回答

5

溫莎的日誌記錄工具要求您將記錄器作爲屬性公開。

不一定。您也可以將您的記錄器作爲構造函數(即強制性)依賴項。記錄器通常被聲明爲屬性(即可選的依賴項),因爲可能沒有記錄器。也就是說,組件應該能夠在沒有記錄器的情況下運行。

如果我使用的是使用靜態類來創建日誌

這是一個服務定位器自定義包裝,該代碼夫妻MyClassLogManager,這是恕我直言比你試圖變得更糟遠離。

+0

但我不會已經耦合到'Castle.Core.Logging.ILogger'嗎?或者是因爲'LogManager'是一個靜態類,我無法替代它? – Books 2010-11-15 13:46:48

+0

@Ashley:確切地說。與接口的耦合少得多。 – 2010-11-15 13:50:40