天天看點

EntLib 3.1學習筆記(4) : Logging Application Block

    開發人員經常編寫需要日志和規範功能的應用程式。通常,這些應用程式必須适當地格式化事件和記錄事件,不論是在本地還是通過網絡。在某些情況下,您可能需要對一台計算機上來自多個源的事件進行整理。

    日志應用程式塊通過收集應用程式需要包含的多個最常見的日志和規範任務來簡化應用程式的開發。每個任務都以一緻的方式處理,并從特定的日志和規範提供程式中抽象應用程式代碼。體系結構模型可讓您通過更改配置來更改基礎事件接收器和格式化程式,而無需更改應用程式代碼。

1.應用程式可以使用日志塊在多個位置記錄事件: 

(1) 事件日志 

(2) 電子郵件 

(3) 資料庫 

(4) 消息隊列 

(5) 檔案 

(6) WMI

2. 使用

(0) EntLib配置工具配置App.config/Web.config,New->Logging Application Block:

    a. 建立或定制Formatter(預設隻有一個Text Formatter,我們可以定制其Template);

    b. 建立或定制Trace Listeners(預設隻有一個Fomatted EventLog TraceListener,其可以将日志記錄在系統日志中),并為其指定一個Formatter(上一步a中定義了的Formatter);不同的Trace Listener記錄事件的位置(Email、EventLog、File、DB、MSMQ、WMI)不同。

    c. 建立Category Source(預設隻有一個General Category,其使用EventLog TraceListener将日志記錄在系統日志中),并為其指定Trace Listener(上一步b中定義了的Trace Listener).

(1) 記錄日志:

EntLib 3.1學習筆記(4) : Logging Application Block

LogEntry log = new LogEntry();

EntLib 3.1學習筆記(4) : Logging Application Block

log.EventId = 300;

EntLib 3.1學習筆記(4) : Logging Application Block

log.Message = "Sample message";

EntLib 3.1學習筆記(4) : Logging Application Block

logEntry.Categories.Clear();

EntLib 3.1學習筆記(4) : Logging Application Block

log.Categories.Add("CategoryName");//參數為上面步驟c中定義的Category.Name,可以Add多個Category

EntLib 3.1學習筆記(4) : Logging Application Block

log.Severity = TraceEventType.Information;

EntLib 3.1學習筆記(4) : Logging Application Block

log.Priority = 5;

EntLib 3.1學習筆記(4) : Logging Application Block

Logger.Write(log);

(2) 日志裡面包含名-值對的字典

EntLib 3.1學習筆記(4) : Logging Application Block

Dictionary<string, object> dictionary = new Dictionary<string, object>(); 

EntLib 3.1學習筆記(4) : Logging Application Block

ManagedSecurityContextInformationProvider informationHelper = new ManagedSecurityContextInformationProvider();

EntLib 3.1學習筆記(4) : Logging Application Block

informationHelper.PopulateDictionary(dictionary);

EntLib 3.1學習筆記(4) : Logging Application Block

dictionary.Add("logInforName", strLogInfor);

EntLib 3.1學習筆記(4) : Logging Application Block

Logger.Write("Log entry with extra information", dictionary);//使用預設的Genera Category,記錄事件到系統日志中

EntLib 3.1學習筆記(4) : Logging Application Block

(3) 跟蹤活動并記錄上下文資訊

    LAB支援通過活動ID來跟蹤一項活動,活動ID可以在代碼中指定,也可以通過程式塊來自動生成,LAB自動記錄活動的起始時間和結束時間:

EntLib 3.1學習筆記(4) : Logging Application Block

using (new Tracer("Category1"))

EntLib 3.1學習筆記(4) : Logging Application Block

{

EntLib 3.1學習筆記(4) : Logging Application Block

       using (new Tracer("Category2"))

EntLib 3.1學習筆記(4) : Logging Application Block

       {

EntLib 3.1學習筆記(4) : Logging Application Block

  LogEntry logEntry = new LogEntry();

EntLib 3.1學習筆記(4) : Logging Application Block

  //給LogEntry的屬性指派

EntLib 3.1學習筆記(4) : Logging Application Block

                Logger.Write(logEntry);//此時,logEntry會寫5條日志:

EntLib 3.1學習筆記(4) : Logging Application Block

  //1. Start Trace: Activity 'ActivityID' 

EntLib 3.1學習筆記(4) : Logging Application Block

.. at .. ticks

EntLib 3.1學習筆記(4) : Logging Application Block

  //   Category: Category1

EntLib 3.1學習筆記(4) : Logging Application Block

  //2. Start Trace: Activity 'ActivityID(同上)'

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

  //   Category: Category2, Category1

EntLib 3.1學習筆記(4) : Logging Application Block

  //3. Simulated General 

EntLib 3.1學習筆記(4) : Logging Application Block

..Activity='ActivityID(同上)'

EntLib 3.1學習筆記(4) : Logging Application Block

  //   Category: General, Category2, Category1

EntLib 3.1學習筆記(4) : Logging Application Block

  //4. End Trace: Activity 'ActivityID(同上)'

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

 at 

EntLib 3.1學習筆記(4) : Logging Application Block

 ticks

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

  //5. End Trace: Activity 'ActivityID(同上)'

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

       }

EntLib 3.1學習筆記(4) : Logging Application Block

}

(4) 建立過濾事件

Filters->New->可以建立Category Filter/Custom Filter/LogEnabled Filter/Priority Filter

Category Filter:根據Category的類别進行過濾(Deny all except: someCategory);

Priority Filter:隻記錄優先級在MinimumPriority和MaxmumPriority之間的事件;

LogEnabled Filter:記錄(Enabled=true)或不記錄(Enabled=false)所有的LogEntry。

EntLib 3.1學習筆記(4) : Logging Application Block

if (Logger.GetFilter<LogEnabledFilter>().Enabled)

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

     // Logging is enabled.

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

else

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

     // Logging is not enabled.

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

if (Logger.GetFilter<CategoryFilter>().ShouldLog(categories))//ICollection<string> categories;

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

     // Event will be logged.

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

     // Event will not be logged.

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

if (Logger.GetFilter<PriorityFilter>().ShouldLog(priority))//int priority;

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

if (Logger.ShouldLog(logEntry))//彙總上面的過濾結果,判斷是否應該過濾掉該事件

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

    // Perform possibly expensive operations gather information for the event to be logged.

EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block
EntLib 3.1學習筆記(4) : Logging Application Block

    // Event will not be logged.

EntLib 3.1學習筆記(4) : Logging Application Block

3. Logging Application Block的設計:

本文轉自Silent Void部落格園部落格,原文連結:http://www.cnblogs.com/happyhippy/archive/2007/08/15/856159.html,如需轉載請自行聯系原作者