Enterprise Library: Logging and Instrumentation Application Block概述
Written by: Rickie Lee (rickieleemail#yahoo.com)
My blog:http://www.cnblogs.com/rickie
Enterprise Library中的Logging and Instrumentation Application Block让记录日志信息到不同的目的位置更加方便,新的Logging Block非常直观并功能丰富。每个应用程序都会需要一系列logging功能,并且还需要优雅地处理和记录未捕获的异常信息。本文简单介绍了Logging and Instrumentation Application Block的功能特点。
Enterprise Library Logging and Instrumentation Application Block让开发人员在应用程序集成标准的logging and Instrumentation功能,应用程序可以使用该Application Block记录日志事件到不同的位置:
- Event Log (Windows事件日志)
- Email消息
- 数据库
- 消息队列(MSMQ)
- 文本文件
- WMI
Client-Distributor架构
Application Block主要由2部分组成:Client和Distributor。Client负责创建消息,这些消息将由Distributor写入目标位置。在多数情况下,Client和Distributor在同一台机器上,但是你也可以分离这2个部分到不同的进程或不同的机器上。
Distributor设置
Client根据分发策略(Distribution Strategies)发送消息到Distributor,在Application Block中提供了2个分发策略:In Process和MSMQ,默认是In Process策略。你可以删除In Process strategy,然后添加MSMQ strategy。当选择MSMQ strategy,Client需要创建日志消息并发送到MSMQ消息队列。另外一个进程则等待到达的消息,并写入合适的日志接收池(Logging Sink)。
Distributor Service
Application Block中包含一个Windows Service: MSMQ Distributor Service。当安装该服务后,该服务会在指定的时间间隔检测消息队列。
定制Sink
在某些情况下,也许Logging and Instrumentation Application Block提供的sink(接收池)并不能满足要求,你也可以创建定制的sink,如下所示:
[C#]
public class DebugSink : LogSink, IConfigurationProvider
[Visual Basic]
Public Class DebugSink
Inherits LogSink
Implements IConfigurationProvider
定制的sink需要实现IConfigurationProvider接口,并继承LogSink抽象类。另外需要增加SendMessageCore方法到定制sink类中,确保实现必要的动作来记录日志信息到定制的sink。
目录Categories
在Logging and Instrumentation Application Block配置文件中,Distributor Settings下包含有许多目录Categories,默认有Gereral和Trace,如下图所示。
Logging and Instrumentation Application Block提供灵活的松耦合机制来记录日志消息,每一个日志消息将写入指定目录,每一个目录可以有0或多个目标存储位置,目标存储位置指向接收池(sink)和可选的格式化器。
缺省情况下,General目录设定为default目录,并设计将消息写入Application事件日志。你可以通过修改Distributor Settings节点的DefaultCategory属性值来改变缺省的目录设置。你也可以指定缺省的Formatter格式化日志消息。
Formatters控制格式化输出
使用Formatters,Logging Block允许你精确控制消息的输出格式。Logging Block内置了一个TextFormatter的实现,TextFormatter使用带Token的模板。你可以通过Configuration Console配置工具创建和管理你的模板。当消息准备写入接收池(sink)时,Formatter会使用日志消息属性值替换每一个token。如下是默认的模板(Property: Token):
Timestamp: {timestamp}
Message: {message}
Category: {category}
Priority: {priority}
EventId: {eventid}
Severity: {severity}
Title:{title}
Machine: {machine}
Application Domain: {appDomain}
Process Id: {processId}
Process Name: {processName}
Win32 Thread Id: {win32ThreadId}
Thread Name: {threadName}
Extended Properties: {dictionary({key} - {value}
)}
Client Settings
Client Settings节点提供了一系列选项,用来控制Logging Block的行为,如LoggingEnabled用来控制Logging行为有效或失效。当Logging失效时,可以产生最少的时间开销。CategoryFilterSettings属性允许你配置特定目录有效或失效(Enable or Disable),你也可以基于数字优先级(numberic priority)来过滤日志消息。在配置设置中,你可以定义消息分发的最小优先级阀值。具体属性列表如下所示:
下一篇文章将演示Logging and Instrumentation Application Block的具体应用。
***
作者:Rickie Lee (rickieleemail#yahoo.com)
本文参考如下References文档及其链接。
References:
1. Microsoft Enterprise Library, Logging and Instrumentation Application Block.
2. Logging with Enterprise Library, http://blog.hishambaz.com/archive/2005/01/30/202.aspx
3. Rickie, Microsoft patterns & practices Enterprise Library January 2005 [中文稿], http://www.cnblogs.com/rickie/archive/2005/01/30/99443.html
4. Rickie, Enterprise Library released! http://www.cnblogs.com/rickie/archive/2005/01/29/99106.html