且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

EntLib 3.1学习笔记(4) : Logging Application Block

更新时间:2022-09-13 11:58:49


[zh] http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/dnpag2logging.mspx?mfr=true
[en] http://msdn2.microsoft.com/en-us/library/ms998162.aspx

    开发人员经常编写需要日志和规范功能的应用程序。通常,这些应用程序必须适当地格式化事件和记录事件,不论是在本地还是通过网络。在某些情况下,您可能需要对一台计算机上来自多个源的事件进行整理。

    日志应用程序块通过收集应用程序需要包含的多个最常见的日志和规范任务来简化应用程序的开发。每个任务都以一致的方式处理,并从特定的日志和规范提供程序中抽象应用程序代码。体系结构模型可让您通过更改配置来更改基础事件接收器和格式化程序,而无需更改应用程序代码。

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 BlockLogEntry log = new LogEntry();
EntLib 3.1学习笔记(4) : Logging Application Blocklog.EventId 
= 300;
EntLib 3.1学习笔记(4) : Logging Application Blocklog.Message 
= "Sample message";
EntLib 3.1学习笔记(4) : Logging Application BlocklogEntry.Categories.Clear();
EntLib 3.1学习笔记(4) : Logging Application Blocklog.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 Blocklog.Priority 
= 5;
EntLib 3.1学习笔记(4) : Logging Application BlockLogger.Write(log);


(2) 日志里面包含名-值对的字典

EntLib 3.1学习笔记(4) : Logging Application BlockDictionary<stringobject> dictionary = new Dictionary<stringobject>(); 
EntLib 3.1学习笔记(4) : Logging Application BlockManagedSecurityContextInformationProvider informationHelper 
= new ManagedSecurityContextInformationProvider();
EntLib 3.1学习笔记(4) : Logging Application BlockinformationHelper.PopulateDictionary(dictionary);
EntLib 3.1学习笔记(4) : Logging Application Blockdictionary.Add(
"logInforName", strLogInfor);
EntLib 3.1学习笔记(4) : Logging Application BlockLogger.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 Blockusing (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.. at .. ticks
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 BlockEntLib 3.1学习笔记(4) : Logging Application Block at EntLib 3.1学习笔记(4) : Logging Application Block ticks
EntLib 3.1学习笔记(4) : Logging Application Block  
//   Category: Category2, Category1
EntLib 3.1学习笔记(4) : Logging Application Block  
//5. End Trace: Activity 'ActivityID(同上)'EntLib 3.1学习笔记(4) : Logging Application BlockEntLib 3.1学习笔记(4) : Logging Application Block at EntLib 3.1学习笔记(4) : Logging Application Block ticks
EntLib 3.1学习笔记(4) : Logging Application Block  
//   Category: Category1
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 Blockif (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
else
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     
// Event will be logged.
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     
// 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.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
else
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的设计:
EntLib 3.1学习笔记(4) : Logging Application Block


本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/08/15/856159.html,如需转载请自行联系原作者