[问题] 如何有效率为某个函式库作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