原文参考 http://msdn.microsoft.com/en-us/library/dn440731(v=pandp.60).aspx

一、简介

日志通常满足两个主要的要求:1、监控应用程序性能并提供信息。性能方面,日志可以监控程序内部发生了什么,有时也监控程序外部发生了什么。2、更重要的是用于审计。这种日志可以跟踪用户的行为并且记录用户执行的一系列任务、读取和修改的信息、访问的资源。

日志模块是一个高灵活和可配置的解决方案,它允许以灵活多样的方式创建和存储日志信息于各种位置、分类并过滤信息、收集调试过程中的上下文信息、审计跟踪并记录。

二、日志模块能做什么?

日志模块可以使日志功能和应用程序代码分离。它可以把日志条目发送到Windows 事件日志、数据库、文本文件,也可以生成包含日志信息的邮件、windows消息队列等。也可以自定义发送目的。应用程序中,仅需简单地用合适的对象(如Logwriter)生成一个日志条目,然后调用其方法把日志条目写入相应的目标位置。

图1-An overview of the logging process and the objects in the Logging block

三、日志的代价和额外的上下文信息

无论怎样实现日志,它总会有一些性能影响。日志模块提供了灵活的、高度可配置的日志解决方案,并且经过精心设计来最小化性能影响。但是,你仍然需要知道这个影响,并且要考虑你的日志方案会如何影响它,需要在需求之间平衡。

LogWriter自动收集一些像时间、应用程序、机器名字、进程ID等上下文信息。为了最小化性能影响,LogWriter类缓存了这些值并且采用了延迟最小化——即只有当被一个Listener实际使用时才去创建。
然而,收集额外的上下文信息的代价是非常高的并且浪费宝贵的资源,这可能会影响性能。因此,在创建LogEntry时,只有指定需要某些不常用的信息时,日志模块才去收集。日志模块中的四个类可以收集指定的上下文信息,包括COM+、当前堆栈、运行时安全相关以及系统安全相关。LogEntry还有一个字典属性允许程序员添加信息。

四、怎样使用Logging Block?

其中的关键是创建日志条目,然后调用方法把这个日志条目写入目标。

1、添加LoggingBlock的引用到项目中

需要添加的引用有Microsoft.Practices.EnterpriseLibrary. Logging.dll,如果日志要写入数据库还要引用 Microsoft.Practices.EnterpriseLibrary. Logging.Database.dll

2、配置Loggin Block

配置Logging Block可以用代码的方法,也可以用配置工具,这里介绍配置工具的方法。

Step1启动配置工具。运行"EntLibConfig.exe",点击"File|Open"打开目标程序的配置文件(Web.config或App.config),打开文件后如图1:

图1

Step2配置。如果左边导航栏未出现"Logging Settings"节点则表明以前未进行过企业库日志相关的配置,此时点击"Blocks|Add Logging Settings",出现图2界面:

图2

如果是修改配置请右击"Logging Settings"选择"Show/Hide Application Block Elements"(或点击前面的三角符号)也会出现上图。

查看图2,先不要管"Logging Filters",界面被两条竖线划分成左中右三个区域,左边的是Category(日志类别),中间的是Listener(保存日志文件的载体),右边是Formatter(日志内容格式化器)。一个Category可以包含多个Listener,即一份日志可以写入多个载体中,一个Listener对应一个Formatter。

Logging Target Listener
保存日志的监听器,其中定义了日志保存的位置(日志载体):数据库、XML文件、FlatFile(文本文件)、Windows事件等10个位置。点击"Logging Target Listeners"右方的"+"号,可以添加日志载体。日志载体可分为10种类型:

Log Message Formatters日志内容格式器。用于设置日志的格式。每一个Listener需要设定唯一一个Formatters,一个Formatters可以被多个Listener使用。

Categories分类。每一个分类都有一个名字,每一个分类中包含一个或者多个Listener。当调用LogWriter.Write()方法时,需要给该方法指定所使用的分类的名字(如果不指定分类的名字则使用默认分类),write方法根据分类的名字找到其中包含的Listener,把日志内容写到每一个Listener中,其内容根据Formatter进行格式设置。如果你的应用程序需要不同类型的日志信息,你可以定义多个分类,比如:应用程序警告可以定义一个分类,该分类中包含Windows Event Listener;而用户的所有操作信息写到文本文件中,这就需要定义另外一个分类,其中包含Flat File Listener。

五、使用LogWriter创建和写入日志条目

(1)使用LogWriter的Write方法时,首先获得一个LogWriter实例,获得该实例需要一个LoggingConfiguration对象作为参数。

LoggingConfiguration loggingConfiguration = BuildProgrammaticConfig();

LogWriter defaultWriter = new LogWriter(loggingConfiguration);

(2)或者用LogWriterFactory类来自动读取配置文件,然后创建实例

LogWriterFactory logWriterFactory = new LogWriterFactory();
LogWriter logWriter = logWriterFactory.Create();

下面的几个例子演示了如何使用Write方法

// Check if logging is enabled before creating log entries.
if (defaultWriter.IsLoggingEnabled())
{
  defaultWriter.Write("Log entry created using the simplest overload.");
  defaultWriter.Write("Log entry with a single category.", "General");
  defaultWriter.Write("Log entry with a category, priority, and event ID.",

"General", 6, 9001);
  defaultWriter.Write("Log entry with a category, priority, event ID, "
                      + "and severity.", "General", 5, 9002,
                      TraceEventType.Warning);
  defaultWriter.Write("Log entry with a category, priority, event ID, "
                      + "severity, and title.", "General", 8, 9003,
                      TraceEventType.Warning, "Logging Block Examples");
}
else
{
  Console.WriteLine("Logging is disabled in the configuration.");
}

上面的内容对日志相关的基本知识和总体思路进行了说明。后面的部分会对涉及到的某些知识详细的介绍。

六、Categories

从该图可以看到,其需要设置的内容不多,Name:分类的名称。AutoFlush:设置为Ture时,每当调用Write()时,自动把日志信息写到目标;设置为Flase时,调用Write()时,日志仅仅写入缓存,当调用Listener的Flush方法时才写入目标。Listeners是该分类包含的目标监听器,可以根据需要添加多个监听器。

Enterprise Library 6——Using the Logging Application Block的更多相关文章

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图:   从上图我们可以 ...

  2. Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

    Download dll: http://www.microsoft.com/en-us/download/confirmation.aspx?id=15104 http://www.cnblogs. ...

  3. 微软Enterprise Library 4.1和Unity 1.2

    说明 微软模式与实践团队今天发布了Enterprise Library 4.1和Unity 1.2版本,这次发布的主要新特性如下: 1. 支持Visual Studio 2008 SP1 2. Uni ...

  4. Enterprise Library系列文章目录(转载)

    1. Microsoft Enterprise Library 5.0 系列(一) Caching Application Block (初级) 2. Microsoft Enterprise Lib ...

  5. Enterprise Library 5.0 系列教程

    1. Microsoft Enterprise Library 5.0 系列教程(一) Caching Application Block (初级) 2. Microsoft Enterprise L ...

  6. 系列文章--Enterprise Library文章总结

    自Enterprise Library 1.1 推出以来,Terry写了一系列的关于Enterprise Library的文章,其中得到了很多朋友的支持,在这里一并表示感谢.为了方便大家的阅读,这里我 ...

  7. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block 到目前为止,我们使用的模块都是在同一个配置 ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block 代理对象(Proxy Object) ...

随机推荐

  1. Houdini 13在Ubuntu系统下流畅运行、不崩溃

    至尊影视特效软件Houdini FX,当前最新版是13.0.547,经过试用在Ubuntu系统下可以完美运行,目前为止还没出现过崩溃的情况,之前在windows下使用Houdini 13简直就是噩梦, ...

  2. 简直喝血!H.265要被专利费活活玩死

    转自 http://news.mydrivers.com/1/440/440145.htm H.264是如今最流行的视频编码格式之一,不但技术先进,而且专利费很低,企业每年只需支付650万美元,而个人 ...

  3. 收集一下Windows7系统啊

    Windows7系统:http://down.662p.com/list/141_1.html   萝卜家园WIN7系统X86位旗舰特别GHOST版2014年12月 这个是萝卜家园WIN7系统X86位 ...

  4. Windows优化大师最新版 V7.99 Build 12.604发布

    本文由 www.169it.com 收集整理 Windows优化大师是一款功能强大的系统工具软件,它提供了全面有效且简便安全的系统检测.系统优化.系统清理.系统维护四大功能模块及数个附加的工具软件.使 ...

  5. 页面多语系自动切换-.resx

    实现这个需要应用到微软提供的本地资源文件Resources,实际上就是一种key  value的形式. 语言自动切换原理有两种 读取浏览器的语言首选项 根据IP网段进行识别.比如有的人通过VPN连接到 ...

  6. xcode5下cocos2dx横竖屏设置

    我们在开发一款游戏之前一定会考虑的一件事就是,我们的游戏是支持横屏还是竖屏,又或者是横竖屏都支持.那么如何在xcode中对项目进行设置呢?下面我就在xcode5.1.1中利用cocos2dx2.2.3 ...

  7. AMQ学习笔记 - 17. 事务的测试

    概述 对事务机制进行测试. 测试实例 测试实例 结果预测 发送正常 3条消息入队 发送异常 0条消息入队 接收正常 3条消息出队 接收异常 0条消息出队 demo设计 设计图 测试分工 测试类 测试方 ...

  8. 6款基于SVG的HTML5应用和动画

    1.HTML5 SVG 3D蝴蝶飞舞动画 逼真超酷 这次我们要分享的这款HTML5动画简直就是逆天,利用SVG制作的3D蝴蝶飞舞动画,蝴蝶飞舞动画非常逼真,蝴蝶飞舞的路线是利用SVG构造的.另外,动画 ...

  9. C++ Strings(字符串)

    Constructors 构造函数,用于字符串初始化 Operators 操作符,用于字符串比较和赋值 append() 在字符串的末尾添加文本 assign() 为字符串赋新值 at() 按给定索引 ...

  10. ubuntu 常用参数设置

        在Linux下,对于参数的设置,一般来说,都遵循这个规律.每一个功能程序,一定对于一个对于名字的配置文件.     涉及到多用户的功能配置,一定有一个全局的配置文件,对所有用户都生效,而每个用 ...