现在的位置: 首页 > 综合 > 正文

浅尝微软企业库5.0日志功能

2018年05月27日 ⁄ 综合 ⁄ 共 1992字 ⁄ 字号 评论关闭

最近项目需要使用成熟的日志处理模块,我想到了微软企业库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: 
----------------------------------------

上面可以看到方法的输入,输出值,和执行时间,很不错,不是吗?

抱歉!评论已关闭.