2008-09-19 188 views
2

使用Log4Net進行日誌記錄時,很容易將稱爲日誌的類放入日誌文件中。我在過去發現,這使得跟蹤代碼和查看類中的流程變得非常簡單。在log4net的我用%記錄器屬性的轉換模式,像這樣:日誌記錄應用程序塊 - 記錄調用者

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 

這給我我想要的輸出:

2008-09-19 15:40:26,906 [3132] ERROR <b>Log4NetTechDemo.Tester</b> [(null)] - Failed method

您可以從輸出中看到,類已經調用日誌是Log4NetTechDemo.Tester,所以我可以很容易地將錯誤追溯到該類。

在日誌記錄應用程序塊中,我無法弄清楚如何通過簡單的日誌調用完成此操作。有誰知道它是如何做到的?如果是這樣,一個或多個步驟可能會非常有幫助。

回答

5

將調用方法添加到LogEntry的ExtendedProperties字典;假設您尚未從格式化程序模板中刪除ExtendedProperties標記,當然。

把東西像這樣在日誌包裝:

public void LogSomething(string msg) 
{ 
    LogEntry le = new LogEntry { Message = msg }; 
    le.ExtendedProperties.Add("Called from", new StackFrame(1).GetMethod().ReflectedType); 
    Logger.Write(le); 
} 

調用此產生像這樣在日誌的末尾:

Extended Properties: Called from - LAB_Demo.Tester 
1

我們沒有找到一個簡單的方法沒有擊中StackTrace。如果它是一個例外,我們只是從搶:

StackTrace trace = new StackTrace(ex, true); 
StackFrame frame = trace.GetFrame(0); 

對於繁瑣的項目,我們只是寫的字符串。我們有一個能夠在插入時獲取類名的片段。我們也用類名聲明const字符串。

不漂亮,但它是我們找到的最好的。我希望別人在這個線程中有一個bettwe的答案:)

相關問題