zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    python2文件转换为exe可执行文件
    pycharm下 os.system os.popen执行命令返回有中文乱码
    python 虚拟环境
    git commit之后,想撤销commit
    Android Dialog使用举例
    Builder模式在Java中的应用(转)
    AngularJS promise()
    给你一个承诺
    AngularJs 用户登录验证模块(demo)参考总结
    推荐 15 个 Angular.js 应用扩展指令(参考应用)
  • 原文地址:https://www.cnblogs.com/rickie/p/103983.html
Copyright © 2011-2022 走看看