阅读本文之前,请先阅读:Enterprise Library 2.0 -- Logging Application Block (上) 
       上一篇中我们介绍了如何去配置Logging Application Block,本文将主要介绍Logging Application Block 的基本操作以及Formatter和Trace Listeners 的自定义方法,首先我们来看如何将一个事件日志写入到一个文本文件中。
    假设我们按照上一篇的操作配置了Logging Application Block,那么配置文件中的信息如下:

Enterprise Library 2.0 -- Logging Application Block (下)  <loggingConfiguration name="Logging Application Block" tracingEnabled="true"
Enterprise Library 2.0 -- Logging Application Block (下)    defaultCategory
="General" logWarningsWhenNoCategoriesMatch="true">
Enterprise Library 2.0 -- Logging Application Block (下)    
<listeners>
Enterprise Library 2.0 -- Logging Application Block (下)      
<add fileName="trace.log" header="----------------------------------------"
Enterprise Library 2.0 -- Logging Application Block (下)        footer
="----------------------------------------" formatter="SHY520 Formatter"
Enterprise Library 2.0 -- Logging Application Block (下)        listenerDataType
="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"

Enterprise Library 2.0 -- Logging Application Block (下)        traceOutputOptions
="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"

Enterprise Library 2.0 -- Logging Application Block (下)        name
="SHY520 Listeners" />
Enterprise Library 2.0 -- Logging Application Block (下)      
<add source="Enterprise Library Logging" formatter="Text Formatter"
Enterprise Library 2.0 -- Logging Application Block (下)        log
="Application" machineName="" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"

Enterprise Library 2.0 -- Logging Application Block (下)        traceOutputOptions
="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"

Enterprise Library 2.0 -- Logging Application Block (下)        name
="Formatted EventLog TraceListener" />
Enterprise Library 2.0 -- Logging Application Block (下)    
</listeners>
Enterprise Library 2.0 -- Logging Application Block (下)    
<formatters>
Enterprise Library 2.0 -- Logging Application Block (下)      
<add template="Timestamp: {timestamp} Message: {message} Category: {category} Priority: {priority} EventId: 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下){eventid} Severity: {severity} Title:{title} Machine: {machine} Application Domain: {appDomain} Process Id: 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下){processId} Process Name: {processName} Win32 Thread Id: {win32ThreadId} Thread Name: {threadName} Extended Properties: 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下){dictionary({key} - {value} )}"

Enterprise Library 2.0 -- Logging Application Block (下)        type
="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)Culture=neutral, PublicKeyToken=null"

Enterprise Library 2.0 -- Logging Application Block (下)        name
="Text Formatter" />
Enterprise Library 2.0 -- Logging Application Block (下)      
<add template="Timestamp: {timestamp} Message: {message} Category: {category} Priority: {priority} EventId: 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下){eventid} Severity: {severity} Title:{title} Machine: {machine} Application Domain: {appDomain} Process Id: 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下){processId} Process Name: {processName} Win32 Thread Id: {win32ThreadId} Thread Name: {threadName} Extended Properties: 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下){dictionary({key} - {value} )}"

Enterprise Library 2.0 -- Logging Application Block (下)        type
="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)Culture=neutral, PublicKeyToken=null"

Enterprise Library 2.0 -- Logging Application Block (下)        name
="SHY520 Formatter" />
Enterprise Library 2.0 -- Logging Application Block (下)    
</formatters>
Enterprise Library 2.0 -- Logging Application Block (下)    
<logFilters>
Enterprise Library 2.0 -- Logging Application Block (下)      
<add categoryFilterMode="AllowAllExceptDenied" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, 
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"

Enterprise Library 2.0 -- Logging Application Block (下)        name
="Category Filter" />
Enterprise Library 2.0 -- Logging Application Block (下)    
</logFilters>
Enterprise Library 2.0 -- Logging Application Block (下)    
<categorySources>
Enterprise Library 2.0 -- Logging Application Block (下)      
<add switchValue="All" name="General">
Enterprise Library 2.0 -- Logging Application Block (下)        
<listeners>
Enterprise Library 2.0 -- Logging Application Block (下)          
<add name="SHY520 Listeners" />
Enterprise Library 2.0 -- Logging Application Block (下)        
</listeners>
Enterprise Library 2.0 -- Logging Application Block (下)      
</add>
Enterprise Library 2.0 -- Logging Application Block (下)    
</categorySources>
Enterprise Library 2.0 -- Logging Application Block (下)    
<specialSources>
Enterprise Library 2.0 -- Logging Application Block (下)      
<allEvents switchValue="All" name="All Events" />
Enterprise Library 2.0 -- Logging Application Block (下)      
<notProcessed switchValue="All" name="Unprocessed Category" />
Enterprise Library 2.0 -- Logging Application Block (下)      
<errors switchValue="All" name="Logging Errors &amp; Warnings">
Enterprise Library 2.0 -- Logging Application Block (下)        
<listeners>
Enterprise Library 2.0 -- Logging Application Block (下)          
<add name="Formatted EventLog TraceListener" />
Enterprise Library 2.0 -- Logging Application Block (下)        
</listeners>
Enterprise Library 2.0 -- Logging Application Block (下)      
</errors>
Enterprise Library 2.0 -- Logging Application Block (下)    
</specialSources>
Enterprise Library 2.0 -- Logging Application Block (下)  
</loggingConfiguration>

下面我们来看如何将日志写入到文本文件:
Enterprise Library 2.0 -- Logging Application Block (下)        [TestMethod]
Enterprise Library 2.0 -- Logging Application Block (下)        
public void DoLog()
        }


      上面的代码中,我们为该日志指定所属类别为General,在配置文件中我们可以看到General这个类别使用的Trace Listener是SHY520 Listeners,SHY520 Listeners是一个Flat File Trace Listener,它指定了我们的日志信息输出的地方(trace.log),我用的测试项目,运行测试后,该文件在TestResult/out目录中,如果是一般的Web项目或Consle项目,该文件则在Bin/Debug目录下,下面我们来看一下输出的日志信息:
Enterprise Library 2.0 -- Logging Application Block (下)

上图中,我们可以看到我们在程序中记录的一些日志信息,我们还可以记录一些额外的信息,这些信息是键值对应的,在1.0版本中我们用Hashtable,这里我们用的是一个泛型的Dictionary类型,代码如下:

Enterprise Library 2.0 -- Logging Application Block (下)        [TestMethod]
Enterprise Library 2.0 -- Logging Application Block (下)        
public void LoggEntry()
        }



然后运行测试,在TestResult/Out目录下的trace.log文件中就能看到我们在程序中添加的额外信息了。

Enterprise Library 2.0 -- Logging Application Block (下)

下面我们来介绍一下过滤器的用法:
实现方法很简单,这里我们假设我们已经按照上一篇文章中的方法配置好了一个Category Filter,在Category Filter中我们可以设置要过滤掉哪种类别的事件日志,具体实现方式有两种,如下:
方法一:

Enterprise Library 2.0 -- Logging Application Block (下)        [TestMethod]
Enterprise Library 2.0 -- Logging Application Block (下)        
public void TestFilter1()
        }

方法二:
Enterprise Library 2.0 -- Logging Application Block (下)        [TestMethod]
Enterprise Library 2.0 -- Logging Application Block (下)        
public void TestFilter2()
        }


        关于事件日志的过滤就说到这里,下面我们来看看如何创建一个自定义的Trace Listener,首先我们新建一个类(MyListener),并且继承与CustomTraceListener,同时不要忘了在为这个新建的类加上[ConfigurationElementType(typeof(CustomTraceListenerData))]的Attribute,最后重写基类的三个方法,在每个方法中加入自己需要的逻辑既可。完整的类的代码如下:

Enterprise Library 2.0 -- Logging Application Block (下)using System;
Enterprise Library 2.0 -- Logging Application Block (下)
using System.Collections.Generic;
Enterprise Library 2.0 -- Logging Application Block (下)
using System.Text;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Logging;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners;
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)
namespace Enterprise_Library_2
}


然后我们在配置Trace Listener的时候选择Custom Trace Listener就可以了。

接下来我们来看看如何自定义Formatter,实现的方法和上面类似,首先新建一个类MyFormatter,继承ILogFormatter接口,同时加上[ConfigurationElementType(typeof(CustomFormatterData))]的Attribute,完整的代码如下:

Enterprise Library 2.0 -- Logging Application Block (下)using System;
Enterprise Library 2.0 -- Logging Application Block (下)
using System.Collections.Generic;
Enterprise Library 2.0 -- Logging Application Block (下)
using System.Text;
Enterprise Library 2.0 -- Logging Application Block (下)
using System.Collections.Specialized;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Logging;
Enterprise Library 2.0 -- Logging Application Block (下)
using Microsoft.Practices.EnterpriseLibrary.Logging.Formatters;
Enterprise Library 2.0 -- Logging Application Block (下)
Enterprise Library 2.0 -- Logging Application Block (下)
namespace Enterprise_Library_2
}


到这里,关于Logging Application Block的有关问题已经都简单的介绍了一下,有遗漏错误的地方,请指正,谢谢!

希望对初学者有所帮助,同时也欢迎Enterprise Library学习者一起共同交流经验。

Email : pwei013@163.com

相关文章:

  • 2021-08-31
  • 2022-03-09
  • 2022-12-23
  • 2021-05-16
  • 2021-07-31
猜你喜欢
  • 2021-11-24
  • 2022-01-18
  • 2021-08-11
  • 2022-01-02
  • 2021-12-11
  • 2022-01-22
相关资源
相似解决方案