[問題] 如何有效率為某個函式庫作call log?

作者: deo2000 (800IM)   2015-04-11 01:27:16
最近用C#在寫一個控制硬體的視窗程式,
控制該硬體的function(API) prototype 全部包在一個.cs檔裡頭,實作則是包在dll。
現在要為這個視窗程式加上call logger,作為日後追蹤debug之用,
只要呼叫到控制硬體的API全部要紀錄。
所以原本是這樣的程式:
HW_API(para0,para1);
加上call log以後就會變這樣:
RichTxtBox.AppendText(DateTime.Now.ToString() //紀錄進入API時間
HW_API(para0,para1);
RichTxtBox.ApependText(Format.String("HW_API({0},{1})",para0,para1));
這樣寫call log壞處有很多:
1. 一行程式變三行
2. 打亂原本排版
3. 很可能call log程式碼哪裡寫錯,結果要用來debug的東西自己有bug
4. 程式碼重複性高, 卻不能集中處理, 提高重用性
我一直想,有沒有可能給API.cs檔加入什麼冬冬?
作一次就可以一勞永逸,萬一有錯也比較容易發現,但想很久還是想不到,
不知道版上高手們,有沒有好的意見?
作者: Litfal (Litfal)   2015-04-11 02:27:00
把log output寫在API class裡面,用事件或TraceListener的方式由外部註冊log追蹤,原本呼叫API的地方還是照樣呼叫。
作者: GoalBased (Artificail Intelligence)   2015-04-11 21:52:00
所以你可以改API嗎?
作者: jizang (阿魯米)   2015-04-12 02:33:00
log4net 如何?
作者: zoeysui (zoeysui)   2015-04-26 20:58:00
有個library叫post sharp ,可以用attribute的方式,對任意函數加入pre/post 處理,應該非常符合你的要求,只要可以接受第三方套件的話
作者: tomex (Tomex Ou)   2015-05-15 07:10:00
查debug.xxx()應用 能切換release即不見log;

Links booklink

Contact Us: admin [ a t ] ucptt.com