開發人員經常編寫需要日志和規範功能的應用程式。通常,這些應用程式必須适當地格式化事件和記錄事件,不論是在本地還是通過網絡。在某些情況下,您可能需要對一台計算機上來自多個源的事件進行整理。
日志應用程式塊通過收集應用程式需要包含的多個最常見的日志和規範任務來簡化應用程式的開發。每個任務都以一緻的方式處理,并從特定的日志和規範提供程式中抽象應用程式代碼。體系結構模型可讓您通過更改配置來更改基礎事件接收器和格式化程式,而無需更改應用程式代碼。
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,如需轉載請自行聯系原作者