在基類中聲明一個記錄器並調用LogManager.GetLogger
似乎更清晰,這樣每個正在繼承的人都可以使用它。然而,在log4net的網站和其他博客就像this blog post它指出,最好是每類中聲明一個記錄器,因爲:我應該爲每個類或基類聲明log4net記錄器嗎?
您可以使用記錄器這種方式在你的對象隔離日誌關切,我完全推薦你這樣做。這將使您能夠使用log4net的分層配置機制來限制和指導單個記錄器的日誌輸出。
這是否意味着如果我把它放在基類中,它會使記錄器成爲瓶頸?
如果是這樣,還有其他解決方案,還是我只需要創建每個類的記錄器?
OP正在使用log4net。雖然記錄器類是單例模式很有用的罕見情況之一,但爲每類使用不同的記錄器可以極大地增強故障診斷能力:您可以非常詳細地配置分別記錄每個類的消息級別。您還可以將來自不同記錄器的消息輸出到不同的目標(文本文件,事件日誌,電子郵件)。我強烈建議使用這樣的庫。如果記錄器是靜態實例化的(每種類型一次),性能差異可以忽略不計。 (不是我的downvote,但是) – Groo 2012-01-30 22:40:38
你的單例不是線程安全的,所以你最終可能會有不同的Logger實例(在記錄器的情況下可能不是一個大問題,但值得注意)。另外,對於日誌記錄,你可能不希望這種模式的分數慢一些(因爲它必須執行額外的空檢查......可能不是什麼大事,但值得注意)。 – 2012-01-30 22:41:30
不熟悉log4net? – 2012-01-30 22:42:14