最近项目需要使用成熟的日志处理模块,我想到了微软企业库5.0,嗯,这个几年前就有了,现在6.0也出了,网上资料少,暂时不考虑
企业库的日志可以以邮件形式发送,以文本格式,XML格式保存,反正其上你能想到的功能,它都跟你考虑到了!
5.0有安装包,6.0似乎没有,只是源码,另外5.0有个EntLib Config .NET工具,用来编辑app.config,这样就可以避免直接在config文件中修改,满眼都是XML标签,找一个东西眼花缭乱的窘迫.
下面以监控一个方法的输入输出,执行时间为例,先打开EntLib Config .NET,打开你要编辑的app.config
顺序是这样先Add Policy Injection Settings然后Add Logging Setting
用rolling.log生成的就是滚动日志,日志文件可以按时间,文件大小等来自动生成多个文件,这样的好处不用我多说,如果一个文件大到上G,那还怎么看?
注意上面的Matching Rules在Member上配置了要监控的方法名称,然后注意PolicyInjection要拦截方法的方式,是在方法执行前发生动作,还是之后,还是之前发生,之后也发生,Include Calling Time表示记录方法的执行时间
下面要实现要监控的类方法,注意这个类要么继承MarshalByRefObject,要么继承ICallHandle
public class Test : MarshalByRefObject { public string CallSomething(string msg) { Thread.Sleep(5000); return "打印" + msg; } }
注意这个类的实例化时必须用PolicyInjection.Create方法来创建
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var test = PolicyInjection.Create<Test>(); var result = test.CallSomething("Hello World"); MessageBox.Show(result); } }
点击一个界面上的button1,日志就生成了,在程序编译好的根目录下找到rolling.log,打开看到如下内容
---------------------------------------- Timestamp: 2014/12/5 9:24:10 Message: ----结束--- Category: General Type: ELibLog.Test Method: CallSomething Parameters: msg : Hello World Return Value: Exception: Call Time: Priority: -1 EventId: 0 Severity: Information Title:Call Logging Machine: 2013-20130913KK Application Domain: ELibLog.vshost.exe Process Id: 9044 Process Name: F:\wangli\练习\ELibLog\ELibLog\bin\Debug\ELibLog.vshost.exe Win32 Thread Id: 6060 Thread Name: ---------------------------------------- ---------------------------------------- Timestamp: 2014/12/5 9:24:15 Message: ----开始--- Category: General Type: ELibLog.Test Method: CallSomething Parameters: msg : Hello World Return Value: 打印Hello World Exception: Call Time: 00:00:05.0106938 Priority: -1 EventId: 0 Severity: Information Title:Call Logging Machine: 2013-20130913KK Application Domain: ELibLog.vshost.exe Process Id: 9044 Process Name: F:\wangli\练习\ELibLog\ELibLog\bin\Debug\ELibLog.vshost.exe Win32 Thread Id: 6060 Thread Name: ----------------------------------------
上面可以看到方法的输入,输出值,和执行时间,很不错,不是吗?