[Tips]StackTrace的小應用

  • 4682
  • 0
  • 2008-12-16

利用StackTrace來記錄log

當在Code裡面,可能要記log或是判斷被哪個method呼叫時要進行額外的動作。

這個時候很有可能需要用到Stack。

上次從黑暗執行緒大大的網站上,找到了很簡單的用法,

主要是使用兩個namespace:System.Diagnostics與System.Reflection。

由於使用到這兩個namespace,所以使用上要更小心效率的問題。

我個人是用在記log,當實際上線的時候,只需要調整flag就可避免執行該記log的片段。

首先先匯入兩個namespace。

using System.Diagnostics;
using System.Reflection;

接著只需要知道三個好用的class:StackTrace、StackFrame與MethodBase。

由於記log的部分是在baseclass底下,所以我要trace的是該method往上兩層的method stack,所以GetFrame的參數是丟2。

StackTrace st = new StackTrace(true);
StackFrame sf = st.GetFrame(2);
MethodBase mb = sf.GetMethod();
logger.Debug(sf.GetFileName() + " 行數: " + sf.GetFileLineNumber().ToString());
logger.Debug(mb.ReflectedType.FullName + "." + mb.Name+"()");

記錄log方面,則是使用log4net。


blog 與課程更新內容,請前往新站位置:http://tdd.best/