Enterprise Library: Logging and Instrumentation Application Block概述

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部分组成:ClientDistributorClient负责创建消息,这些消息将由Distributor写入目标位置。在多数情况下,ClientDistributor在同一台机器上,但是你也可以分离这2个部分到不同的进程或不同的机器上。

Distributor设置

Client根据分发策略(Distribution Strategies)发送消息到Distributor,在Application Block中提供了2个分发策略:In ProcessMSMQ,默认是In Process策略。你可以删除In Process strategy,然后添加MSMQ strategy。当选择MSMQ strategyClient需要创建日志消息并发送到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,默认有GereralTrace,如下图所示。

Enterprise_LoggingConfigurationConsole.JPG

Logging and Instrumentation Application Block提供灵活的松耦合机制来记录日志消息,每一个日志消息将写入指定目录,每一个目录可以有0或多个目标存储位置,目标存储位置指向接收池(sink)和可选的格式化器。

缺省情况下,General目录设定为default目录,并设计将消息写入Application事件日志。你可以通过修改Distributor Settings节点的DefaultCategory属性值来改变缺省的目录设置。你也可以指定缺省的Formatter格式化日志消息。

 

Formatters控制格式化输出

使用FormattersLogging 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}

)}

Enterprise_LoggingFormatterTemplate.JPG

Client Settings

Client Settings节点提供了一系列选项,用来控制Logging Block的行为,如LoggingEnabled用来控制Logging行为有效或失效。当Logging失效时,可以产生最少的时间开销。CategoryFilterSettings属性允许你配置特定目录有效或失效(Enable or Disable),你也可以基于数字优先级(numberic priority)来过滤日志消息。在配置设置中,你可以定义消息分发的最小优先级阀值。具体属性列表如下所示:

Enterprise_LoggingProperty.JPG
下一篇文章将演示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

 

posted @ 2005-02-13 05:05  Rickie  阅读(4746)  评论(1编辑  收藏  举报