利用StackTrace來記錄log
當在Code裡面,可能要記log或是判斷被哪個method呼叫時要進行額外的動作。
這個時候很有可能需要用到Stack。
上次從黑暗執行緒大大的網站上,找到了很簡單的用法,
主要是使用兩個namespace:System.Diagnostics與System.Reflection。
由於使用到這兩個namespace,所以使用上要更小心效率的問題。
我個人是用在記log,當實際上線的時候,只需要調整flag就可避免執行該記log的片段。
首先先匯入兩個namespace。
using System.Diagnostics;
using System.Reflection;
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+"()");
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/