2010-08-19 90 views
5

我一直在使用log4net的幾個月,我創建一個新的記錄器爲每個類的成員變量,就像這樣:Log4Net:如何獲取記錄器?

// Member variables 
private readonly ILog m_Logger = LogManager.GetLogger("MyClass"); 

然後我調用記錄每個方法的類,日誌,像這個:

// Initialize 
m_Logger.Info("MyClass.MyMethod() invoked."); 
... 
m_Logger.Debug("MyClass.MyMethod() did something..."); 
... 
m_Logger.Info("MyClass.MyMethod() completed."); 

有沒有什麼理由不使用這種方法,或者有沒有更好的方法來設置記錄器?謝謝你的幫助。

回答

12

你的記錄可能應該是靜態的,你可以採取其他替代,如利用類型的優勢:

private static readonly ILog m_Logger = LogManager.GetLogger(typeof(MyClass)); 

爲了提高性能,您也應該檢查日誌級別您是在調用之前適當的日誌功能。例如:

if (m_Logger.IsDebugEnabled) { m_Logger.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); } 

上面的例子還顯示了使用反射來獲取方法名稱。

+0

'使用反射來獲取方法名' - 但您不需要請求反射來執行堆棧散步並查閱程序集名稱的程序集元數據:您只需將它輸入源文件 – 2010-08-19 16:57:01

+2

這僅僅是一個示例。使用反射可以將線條簡單地剪切並粘貼到多個位置,而無需爲正確的方法名稱編輯線條。 – Russ 2010-08-19 16:58:18

+0

這不是不再使它線程安全嗎? – 2017-10-29 22:17:44