4.LogFilter
过滤器,对日志信息进行过滤,Enterprise Library默认提供了三种过滤器,用户也可以定义自己的过滤器,示例代码:
了解了这四个对象,其实我们就已经知道了该如何去用编程的方法配置Logging Application Block,下面给出一个简单的例子,先写一个MyLogger静态类:// 创建一个类别过滤器 ICollection<string> categoryfilters = new List<string>(); categoryfilters.Add(DebugCategory); CategoryFilter categoryFilter = new CategoryFilter("CategoryFilter", categoryfilters, CategoryFilterMode.AllowAllExceptDenied); // 加入类别过滤器到集合中 ICollection<ILogFilter> filters = new List<ILogFilter>();
我们再来写一个简单的测试,注意上面的代码中我们过滤掉了Debug类别的日志信息,这样记录到文本文件中的日志信息应该只有My Error一条:using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.Practices.EnterpriseLibrary.Logging; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using Microsoft.Practices.EnterpriseLibrary.Logging.Filters; using Microsoft.Practices.EnterpriseLibrary.Logging.Formatters; using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners; public static class MyLogger ...{ static readonly LogWriter _writer; // 日至记录的类别 const string ErrorCategory = "Error"; const string DebugCategory = "Debug"; // 文本文件的路径 const string LogFilePath = @"d:\\share\\messages.log"; // 模版 const string Template = "Timestamp: {timestamp}{newline}" + "Message: {message}{newline}" + "Category: {category}{newline}" + "Machine: {machine}{newline}"; static MyLogger() ...{ // 实例化一个TextFormatter,使用前面定义的模版 TextFormatter formatter = new TextFormatter(Template); // 实例化TraceListener,记录到文本文件用FlatFileTraceListener FlatFileTraceListener logFileListener = new FlatFileTraceListener(LogFilePath, "----------", "----------", formatter); // 这里是TraceListener的集合,可以增加多个 LogSource mainLogSource = new LogSource("MainLogSource", SourceLevels.All); mainLogSource.Listeners.Add(logFileListener); IDictionary<string, LogSource> traceSources = new Dictionary<string, LogSource>(); traceSources.Add(ErrorCategory, mainLogSource); traceSources.Add(DebugCategory, mainLogSource); // 用来表示不记录日志,这点需要注意一下 LogSource nonExistantLogSource = new LogSource("Empty"); // 创建一个类别过滤器 ICollection<string> categoryfilters = new List<string>(); categoryfilters.Add(DebugCategory); CategoryFilter categoryFilter = new CategoryFilter("CategoryFilter", categoryfilters, CategoryFilterMode.AllowAllExceptDenied); // 加入类别过滤器到集合中 ICollection<ILogFilter> filters = new List<ILogFilter>(); filters.Add(categoryFilter); _writer = new LogWriter(filters, traceSources, nonExistantLogSource, nonExistantLogSource, mainLogSource, ErrorCategory, false, true); } /**//// <summary> /// 记录日志信息到Error,默认类别 /// </summary> /// <param name="message">日志信息</param> public static void Write(string message) ...{ Write(message, ErrorCategory); } /**//// <summary> /// 记录日志信息到特定类别 /// </summary> /// <param name="message">日志信息</param> /// <param name="category">类别</param> public static void Write(string message, string category) ...{ LogEntry entry = new LogEntry(); entry.Categories.Add(category); entry.Message = message; _writer.Write(entry); } }
文本文件中输出的结果为:public partial class _Default : System.Web.UI.Page ...{ protected void Page_Load(object sender, EventArgs e) ...{ MyLogger.Write("My Error"); MyLogger.Write("My Debug", "Debug"); } }
确 输出的结果与我们设想的一致,使用编程的方法配置Logging Application Block简单的就介绍到这里,你也可以使用这种方法来配置其他的应用程序块。不过使用编程的方法来配置,失去了EL的灵活性,要知道EL的根本思想就是配置驱动,但是如果掌握了这些,也许你能够更好的使用EL,在CodeProject上有人写了一篇《Plug-in Manager for Logging - Configure MSEL2 On the fly》---------- Timestamp: 2006-7-8 3:45:05 Message: My Error Category: Error Machine: RJ-097 ----------
http://www.codeproject.com/useritems/Logging_Plug-in_Manager.asp
,有兴趣的朋友不妨参考一下。