`
jinvasshole
  • 浏览: 770857 次
文章分类
社区版块
存档分类
最新评论

C#实现自动化Log日志

阅读更多

在开发项目的时候,我们不免要使用Log记录日志,使用最多的是Log4Net和EntLib Log,在需要记录日志的代码处加入log.Write(日志信息),假设我需要跟踪业务方法,记录方法的传递参数,执行时间,返回数据等;或者我需要查看方法的调用关系,希望进入方法的时候自动记录参数信息,出方法时记录结果和执行时间信息。这时就是一个典型的AOP运用,Java在AOP方面是很容易实现的,因为java有类加载器。但是.Net在AOP方面就不怎么容易,严格意义上.Net没有真正的AOP。这话并不代表.Net不能实现AOP,比如:PostSharp和Enterprise library就能实现。

先介绍一下PostSharp,我们知道.net代码将编译成MSIL(微软中间语言),然后CPU将MSIL的exe文件生成本地CPU的二进制文件格式,PostSharp就是在编译过程中加入IL代码,因而完成AOP功能。
缺点:编译器需要PostSharp组件,维护代码困难,因为IL代码不好识别;
优点:使用方便(PostSharp2是收费版,破解也比较方便,在此不介绍破解)

这里我重点介绍如何使用Enterprise Library实现自动化Log。
1.首先我们需要下载Enterprise Library,最新为5.0版本;
2.新建一个控制台项目,并添加以下程序集
Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary.Logging
Microsoft.Practices.EnterpriseLibrary.PolicyInjection
Microsoft.Practices.ServiceLocation
Microsoft.Practices.Unity
Microsoft.Practices.Unity.Interception
3.添加AutoLogCallHandler类,实现ICallHandler接口
这个类是执行调用目标方法,在调用目标方法前获取方法的参数信息,并用EntLib Log记录日志;
方法结束后,再次记录日志,并统计执行时间和异常处理

4.要自动化日志就需要创建一个标记属性,指定方法能自动进行日志
这里就创建AutoLogCallHandlerAttribute标记属性

5.创建实体类
注意:我在Work和ToString方法上方加上了AutoLogCallHandler属性,它是AutoLogCallHandlerAttribute的简写形式。用以指示这两个方法用AutoLogCallHandler的Invoke来处理。

6.测试代码
注意:必须使用PolicyInjection.Create<Employee>()来创建对象,不然无法实现。

7.还需要用EntLib的配置工具完成Log配置,将Log信息写入Trace.log文件中


好了,测试一下,控制台输入:
Now is 14:03,Lele is working hard!
I'm Lele.
再看看Trace.log文件内容:


实现了自动化Log后,回过头来再看第5步,Employee继承了MarshalByRefObject,一般我们的业务类或数据访问类都有基类,那么我们就需要使用接口
这里我添加一个IEmployee接口,里面就Work方法(ToString是重写Object的)。

然后在测试类改动一下








分享到:
评论

相关推荐

    .NET C# 高性能日志类(开源版-共进步)

    这个日志有一定BUG,在同一解决方案中可以产生日志文件,如果在别的方案中,不会产生日志,开源的目的就是请高手指点迷津,与同行一起进步。

    C# 利用Selenium实现浏览器自动化操作的示例代码

    Selenium是一款免费的分布式的自动化测试工具,支持多种开发语言,无论是C、 java、ruby、python、或是C# ,你都可以通过selenium完成自动化测试。本文以一个简单的小例子,简述C# 利用Selenium进行浏览器的模拟操作...

    SimpleTaskSystem包含NuGet

    软删除支持(继承相应的基类或实现相应接口,会自动实现软删除) 统一的异常处理(应用层几乎不需要处理自己写异常处理代码) 数据有效性验证(Asp.NET MVC只能做到Action方法的参数验证,ABP实现了Application层...

    C#.net_经典编程例子400个

    273 实例190 获取窗口文本 273 实例191 判断文件是否正在被使用 274 实例192 在程序中调用.HLP文件 275 实例193 C#中实现文件拖放 276 实例194 文件比较 276 第7章 操作系统与Windows...

    C#常用功能类库(20111202最新整理)

    12.SR.ShareFunc.WinFunc.LogFunc 按照指定路径、文件名生成日志信息 13.SR.ShareFunc.WinFunc.MouseMoveControl 给指定控件绑定鼠标移动事件,例如Label绑定后,鼠标点击该Label可进行窗体拖拽 或实现自定义的...

    C#程序开发范例宝典(第2版).part02

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

    C#程序开发范例宝典(第2版).part08

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

    C#程序开发范例宝典(第2版).part12

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

    log4Net详解(共2讲)

    估计在不久之后,也可以向VB,C#一样,通过可视化工具拖拽方式即可轻松开发Web应用。 ExtJs在发展过程中不仅一步步地巩固着自己在HTML、CSS、JavaScript领域无可比拟的优势,而且已经开始向相关领域发展扩张。如从...

    AbpConsole.rar

    Log4Net(日志记录) AutoMapper(实现Dto类与实体类的双向自动转换) 客户端: Bootstrap Less AngularJs jQuery Modernizr 其他JS库: jQuery.validate、jQuery.form、jQuery.blockUI、json2 ABP框架已...

    IronPython应用框架AuoPyTest(WinAPI/WatiN/SshScp/Dll插件反射等)

    (b) 自动化测试、自动任务均可以通过python脚本实现,工具集成解析器和调用执行,封装应用包括:linux ssh连接和scp,WinAPI、Web测试等。 (c) 可以不断扩展添加python或.net开源dll,在python脚本中调用。 (3)...

    IronPython应用框架AutoPyTest(WinAPI/WatiN/SshScp/Dll插件反射等)

    (b) 自动化测试、自动任务均可以通过python脚本实现,工具集成解析器和调用执行,封装应用包括:linux ssh连接和scp,WinAPI、Web测试等。 (c) 可以不断扩展添加python或.net开源dll,在python脚本中调用。 (3)...

    C#程序开发范例宝典(第2版).part13

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

Global site tag (gtag.js) - Google Analytics