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

看板C_Sharp (C#)作者 (800IM)時間10年前 (2015/04/11 01:27), 10年前編輯推噓4(404)
留言8則, 5人參與, 最新討論串1/1
最近用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檔加入什麼冬冬? 作一次就可以一勞永逸,萬一有錯也比較容易發現,但想很久還是想不到, 不知道版上高手們,有沒有好的意見? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.122.165.65 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1428686839.A.DE1.html

04/11 02:27, , 1F
把log output寫在API class裡面,用事件或TraceListener的
04/11 02:27, 1F
TraceListen好難喔看瞴~~@@ 有什麼書在教這個class的嗎?

04/11 02:28, , 2F
方式由外部註冊log追蹤,原本呼叫API的地方還是照樣呼叫。
04/11 02:28, 2F
※ 編輯: deo2000 (140.122.136.18), 04/11/2015 16:24:58

04/11 21:52, , 3F
所以你可以改API嗎?
04/11 21:52, 3F
如果沒有夠好的辦法,可能會考慮改API。例如在裡面插入EventHander

04/12 02:33, , 4F
log4net 如何?
04/12 02:33, 4F
暫時還不想採用第三方工具 ※ 編輯: deo2000 (140.122.165.65), 04/14/2015 23:16:09 ※ 編輯: deo2000 (140.122.165.65), 04/15/2015 01:03:41

04/26 20:58, , 5F
有個library叫post sharp ,可以用attribute的方式,對任
04/26 20:58, 5F

04/26 20:58, , 6F
意函數加入pre/post 處理,應該非常符合你的要求,只要可
04/26 20:58, 6F

04/26 20:58, , 7F
以接受第三方套件的話
04/26 20:58, 7F

05/15 07:10, , 8F
查debug.xxx()應用 能切換release即不見log;
05/15 07:10, 8F
文章代碼(AID): #1LA0VttX (C_Sharp)
文章代碼(AID): #1LA0VttX (C_Sharp)