微软企业库 Enterprise Library 到底是不是收费的啊?如果是免费的,为什么都不用呢?大家是出于什么考虑不用它的呢?

解决方案 »

  1.   


    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
    ----------
      

  2.   

    部分免费的,根据需要使用,petshop用的比较多