最近项目需要使用成熟的日志处理模块,我想到了微软企业库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:
----------------------------------------
上面可以看到方法的输入,输出值,和执行时间,很不错,不是吗?