[Tips]StackTrace的小應用

利用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。


或許您會對下列培訓課程感興趣:

  1. 2019/12/21(六)~2019/12/22(日):演化式設計:測試驅動開發與持續重構 第七梯次(台北)
  2. 2020/1/4(六)~2020/1/5(日):Clean Coder:DI 與 AOP 進階實戰 第三梯次(台北)
  3. 2020/02/08(六):【針對遺留代碼加入單元測試的藝術】 第八梯次(台北)
  4. 2020/02/09(日):【極速開發+】 第九梯次(台北)
  5. 2020/02/28(五)~2020/3/1(日) C#進階設計-從重構學會高易用性與高彈性API設計 第三梯次(台北)

想收到第一手公開培訓課程資訊,或想詢問企業內訓、顧問、教練、諮詢服務的,請洽 Facebook 粉絲專頁:91敏捷開發之路