Enterprise Library2.0研究(一)日志组件的使用场景
Enterprise Library2.0刚刚发布了December 2005的release,多了configuration的工具,真是及时,就不用自己做了。被安排看日志这一块,就开始翻译官方的doc,贴出来大家看看。翻得比较粗糙,大家包涵。
1日志组件的介绍
日志组件简化了日志功能的实现。开发者可以将日志记录到多个不同的sinks:
· An e-mail message
· A database
· A message queue
· A text file
· A WMI event
· The event log
· 客户自定义的
日志组件提供了日志信息终端的一致界面。程序代码不用指定信息的目的地。配置设定决定是否写日志和日志写到何处。这意味着程序员不用修改改变程序就可以修改日志记录的行为。
日志组件在下面几个方面有助于应用程序的开发:
· 帮助维持一致的日志记录习惯
· 通过使用一致的体系模型简化开发者的学习曲线
· 提供通用日志记录的解决方案
· 它是可扩展的,支持客户订制
通用场景
开发者经常会写需要日志功能的应用程序。典型的,这些应用程序规格化和记录由事件产生的日志信息。例如,开发者经常编写代码来记录未预想情况的日志,如应用程序的异常,连接数据库的失败。还会编写代码来跟踪应用程序的执行轨迹。
应用程序需要在本地和跨网络写消息。在一些情况下,不得不整理从多个源的事件到一个位置。
日志组件通过封装大多数通用日志场景的类和方法的集合来简化应用程序的开发。这些场景包括:
· 发布和日志化事件消息
· 包含事件的上下文信息
· 跟踪应用程序的活动
每个任务都以一致的行为来处理,从特定的程序中抽象出统一的部分。
新特性的提纲
日志组件被修订来利用.net2.0中System.Diagnostics命名空间的优势。特别的,它严重依赖于TraceListener,TraceSource和CorrelationManager类。在以下几个方面简化了体系模型:
· 不再有分布策略。在你需要自定义分布策略的场景,可以订制特别的TraceListener.
· LogEnter对象可以属于两个以上的分类。
· 你可以创建自己的过滤器。过滤事件在向TraceListener发事件之前。有了过滤器可以基于分类和优先级来忽略不感兴趣的事件
· 可以通过自己的代码来查询过滤器,查看一个特别的事件是否被记录。这意味着可以避免那些没有被配置需记录的log entry做了不好的行为,而无法查看的情况。
需要移植的特性
下面是需要从老版本中移植的部分:
· 新版本中默认的存储位置是应用程序配置文件,老版本中是loggingConfiguration.config。
· LogEntry类的服务器属性现在是TraceEventType枚举,而不是Int32的整型。使用TraceEventType枚举改善了与System.Diagnostics的交互性。
· 如果使用Message Queuing分布策略,需要修改配置使用MsmqTraceListener类。必须在客户端选择发送消息到哪个消息队列
· 为了使用CorrelationManager类,ActivetyID属性是一个GUID,而且不再被保存在堆栈上。这意味着一个请求只有唯一的ActivityID。
· Log接收器(sinks)派生于TraceListener类。
日志组件的依赖
· Core library功能。Core中提供了instrumentation和configuration服务,被所有其他的组件共享。Core包含于Microsoft.Practices.EnterpriseLibrary.Common.dll中。
· ObjectBuilder子系统。提供所有重复和必要的创建和销毁对象实例的任务,同时提供高度的可扩展性。Enterprise library使用objectBuilder子系统来提供如插入配置项到block类和连接instrumentation类。它包含在Microsoft.Practices.ObjectBuilder.dll中。
· 如果使用Database trace listener,就需要Data Access Application Block;需要exception handing application block来记录格式化的异常信息。
1.1应用场景
日志组件致力于提供通用功能给需要日志功能的应用程序的开发者。这些功能涵盖了一些场景。每一个场景都给了一个现实情景的例子。例如从代码中产生事件;讨论特别的情景需求;给出实现这个功能的代码。
罗列这些任务的目的是提供代码的上下文。而不是仅仅给出一组孤立的方法,没有任何关于核处使用的最佳理解,日志组件使用场景来描述代码的使用场景,这些场景对于开发有日志特性的程序员来说是再熟悉不过了。
这些场景包括:
l 从代码中触发事件
l 触发有附加上下文信息的日志消息
l 跟踪活动,传播上下文信息
l 在构建日志消息之前,检查过滤状态
l 配置侦听者的选项
l 引导不同的事件类型到不同的侦听者
l 配置日志过滤条件
l 配置日志从集中的位置产生
l 创建客户订制的侦听者
何时使用Logging Application Block
如果你的应用程序需要挟日志到the event log, e-mail, a database, a message queue, Windows Management Instrumentation (WMI), or a file,你就应该考虑使用日志组件来提供这些功能,特别如果你需要基于分类和优先级来过滤日志消息,需要格式化消息,或者需要不改动代码的情况下改变消息的目的地。日志组件同时被设计成可扩展的,包括方便的创建客户订制的formatters和traceListeners。