Enterprise Library 日志和监测应用程序块--用编程的方法来配置Logging Ap(实例) 2007年12月31日 星期一 09:04 下面给出一个简单的例子,先写一个MyLogger静态类: 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; namespace ClassLibrary1 { public static class Class1 { static readonly LogWriter _writer;
Enterprise Library 日志和监测应用程序块--用编程的方法来配置Logging Ap(实例)
2007年12月31日 星期一 09:04
下面给出一个简单的例子,先写一个MyLogger静态类:
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;
namespace ClassLibrary1
{
public static class Class1
{
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 Class1()
{
// 实例化一个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);
}
}
}
我们再来写一个简单的测试,注意上面的代码中我们过滤掉了Debug类别的日志信息,这样记录到文本文件中的日志信息应该只有My Error一条:
Class1.Write("My Error");
Class1.Write("My Debug", "Debug");文本文件中输出的结果为:
----------
Timestamp: 12/28/2007 9:30:36 AM
Message: My Error
Category: Error
Priority: -1
EventId: 0
Severity: Information
Title:
Machine: XXXXXX
----------