作者deo2000 (800IM)
看板C_Sharp
标题[问题] 如何有效率为某个函式库作call log?
时间Sat Apr 11 01:27:16 2015
最近用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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1428686839.A.DE1.html
1F:推 Litfal: 把log output写在API class里面,用事件或TraceListener的04/11 02:27
TraceListen好难喔看瞴~~@@ 有什麽书在教这个class的吗?
2F:→ Litfal: 方式由外部注册log追踪,原本呼叫API的地方还是照样呼叫。04/11 02:28
※ 编辑: deo2000 (140.122.136.18), 04/11/2015 16:24:58
3F:→ GoalBased: 所以你可以改API吗?04/11 21:52
如果没有够好的办法,可能会考虑改API。例如在里面插入EventHander
4F:推 jizang: log4net 如何?04/12 02:33
暂时还不想采用第三方工具
※ 编辑: deo2000 (140.122.165.65), 04/14/2015 23:16:09
※ 编辑: deo2000 (140.122.165.65), 04/15/2015 01:03:41
5F:推 zoeysui: 有个library叫post sharp ,可以用attribute的方式,对任 04/26 20:58
6F:→ zoeysui: 意函数加入pre/post 处理,应该非常符合你的要求,只要可 04/26 20:58
7F:→ zoeysui: 以接受第三方套件的话 04/26 20:58
8F:推 tomex: 查debug.xxx()应用 能切换release即不见log; 05/15 07:10