我想將當前正在運行的方法的名稱寫入日誌。我知道我可以手動將每個方法的名稱輸入到正在寫入日誌的字符串中,但我希望更自動化和可重用的東西。我認爲這可以用反射來完成,但我不知道從哪裏開始。如何訪問運行方法的名稱?
任何建議或代碼示例?謝謝!
我想將當前正在運行的方法的名稱寫入日誌。我知道我可以手動將每個方法的名稱輸入到正在寫入日誌的字符串中,但我希望更自動化和可重用的東西。我認爲這可以用反射來完成,但我不知道從哪裏開始。如何訪問運行方法的名稱?
任何建議或代碼示例?謝謝!
看看System.Diagnostics.StackTrace類
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = st.GetFrame(0).GetMethod().Name;
記住這裏有一個性能開銷。你需要在性能敏感的代碼中小心使用它。
System.Reflection.MethodBase.GetCurrentMethod().Name
應該做的伎倆。
你正在使用什麼日誌框架?
在圖案佈局log4net的使用方法%
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message - Method:%method%newline"/>
</layout>
參見:http://logging.apache.org/log4net/release/sdk/index.html
如果您正在使用NLOG 2.0,你可以在你的佈局中使用$ {}調用點。請參閱:https://github.com/nlog/nlog/wiki/Callsite-Layout-Renderer
這樣,您甚至不必自己照顧或方法名稱。讓日誌框架爲你做。但請注意,獲取Stackframe速度很慢。
目前,我們沒有使用日誌框架。這是一個非常小的項目,但我正在考慮爲我的下一個項目提供FW。 – DenaliHardtail 2010-11-06 03:07:52
在這種情況下,你必須去新的StackFrame(1,false).GetMethod()方式。假設您爲代碼重用編寫了一個LogWithMethodName(字符串消息)方法。 – 2010-11-06 03:41:18
感謝您爲組指出。我想到了一旦我運行代碼才意識到返回的方法名稱是包含上述堆棧跟蹤代碼的方法。嘗試在整個項目中重用方法時不太有用:-) – DenaliHardtail 2010-11-06 15:53:00