图片 6

本文转自:http://www.cnblogs.com/hnsdwhl/archive/2010/12/01/1893532.html

 

1.下载微软企业库Microsoft Enterprise Library 5.0,并进行安装。

一 Logging Block

2.新建一个控制台或ASP.NET应用程序,在程序中添加要引用的dll文件,dll文件位于Microsoft
Enterprise Library 5.0安装的目录。

Logging是几乎所有的程序中必不可缺少的功能。Logging可以帮助我们调试程序,在后台程序或者执行很耗时的程序,Logging可以帮助我们来记录程序是否正确运行,是否有异常抛出等。

图片 1

Logging通常包含的功能有记录Log到不同的地方,还能够很灵活的控制是否需要Log。企业库的Logging
Block为我们提供了所有的这些功能,通过企业库我们可以很灵活的在app.config/web.app中切换不同的Log方式,Logging提供了以下的方式来Log记录:

3.在调用相关的方法记录日志之前,需对配置文件进行配置,右键点击Web.config文件,选择Edit
Enterprise Library V5 Configuration。

1)The event log

图片 2

2)An e-mail message

4.选择Blocks菜单,点击Add Logging Settings,会出现如下界面。

3)A database

图片 3

4)A message queue

5.点击Logging Target
Listeners旁边的加号,可以添加记录日志的方式,默认的方式为Event Log
Listener,日志记录在Windows系统日志里面,我们可以根据需要添加记录到文件或数据库中等其他方式。

5)A text file

图片 4

6)A Windows® Management Instrumentation (WMI) event

6.接下来可以设置文件的路径和格式化的文本模板。

7)Custom locations using application block extension points

7.修改Text Formatter的Template中的值,可以设置成自己想要的模板。

 

8.在Categories目录中,可以设置记录日志的类型,默认为General,还可以添加或修改类型。选择Listeners对应的下拉列表框,可以设置记录的方式。

二 Logging Block的主要对象和执行过程

9.在设置好所有的信息后,保存相关的信息,配置文件中自动生成相应的配置文件。

Logging Block的主要对象:

<configuration>

1) log entity对象, log entity可以理解为一条log记录;

    <configSections>
        <section name=”loggingConfiguration”
type=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35″
requirePermission=”true” />
    </configSections>
    <loggingConfiguration name=”” tracingEnabled=”true”
defaultCategory=”General”>
        <listeners>
            <add name=”Event Log Listener”
type=”Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35″
               
listenerDataType=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                source=”Enterprise Library Logging” formatter=”Text
Formatter”
                log=”” machineName=”.” traceOutputOptions=”None” />
            <add name=”Flat File Trace Listener”
type=”Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35″
               
listenerDataType=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                fileName=”trace.log” formatter=”Text Formatter”
traceOutputOptions=”None” />
        </listeners>
        <formatters>
            <add
type=”Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                template=”Timestamp: {timestamp}{newline} Message:
{message}{newline} Machine: {localMachine}{newline} Extended
Properties: {dictionary({key} – {value}{newline})}”
                name=”Text Formatter” />
        </formatters>
        <categorySources>
            <add switchValue=”All” name=”General”>
                <listeners>
                    <add name=”Flat File Trace Listener” />
                </listeners>
            </add>
        </categorySources>
        <specialSources>
            <allEvents switchValue=”All” name=”All Events” />
            <notProcessed switchValue=”All” name=”Unprocessed
Category” />
            <errors switchValue=”All” name=”Logging Errors &
Warnings”>
                <listeners>
                    <add name=”Event Log Listener” />
                </listeners>
            </errors>
        </specialSources>
    </loggingConfiguration>
    <system.web>
        <compilation debug=”true” targetFramework=”4.0″ />
    </system.web>

2) log writer为全局的log 管理对象,包含了所有log相关的操作;

</configuration>

3) log filter可以看成是log writer的属性,用来控制log
writer的行为,例如控制log
writer是否起作用,是否只对某些优先级的起作用;

10.在配置好Web.config文件后,在页面引入命名空间Microsoft.Practices.EnterpriseLibrary.Logging,就可以在代码中调用了。

4) trace source/catagory source
,用来管理多个和组织多种log记录方式(trace listener),例如一个trace
source中可以包含多个记录方式,例如记录到db,且同时给用户发email等。一个log
writer可以包含多个trace source。log writer自带有3个特殊的trace
listeners:all event log source, unprocessed log source,warning and
error log source ;

IDictionary<string, object> dic = new Dictionary<string,
object>();
dic.Add(“用户名:”, “张三”);
dic.Add(“IP地址:”, “192.168.11.12”);

5) trace listener: 表示log的记录方式,自带的有db listener,email
listener等;

ICollection<string> coll = new List<string>();
coll.Add(“General”);

6) log formatter: 用来定义log的记录格式和内容;

LogEntry log = new LogEntry();
log.Message = “日志测试”;
log.TimeStamp = DateTime.Now;
log.ExtendedProperties = dic;//记录额外的信息
log.Categories = coll;//设置记录的日志类型

 

Logger.Write(log);

Logging Block的执行过程:

11.最后在trace.log文件中记录相关的日志信息。

1) client构造log entity,然后传递给log writer;

2) log writer使用log filter来过滤log entity,只有没有被过滤的log
entity才真正被记录;

3) log writer将log entity传递给所有的trace source;

4) trace source将log entity传递给管理的trace listener;

5) trace listener按照设置的log formatter来记录log;

logging block的执行过程如下图:

图片 5 

三 Logging Block的配置

可以使用企业库自带的配置工具来生产相应的配置文件,
图片 6

 

例如以上的log writer的配置:

设置log是否可以使用的logging enable
filter和只处理priority为0到5的logging priority filter;

包含了一个名字为General的trace source;

general的trace source包含了一个rolling flat file trace listener;

rolling flat file trace listener使用text formatter来记录log;

 

配置后的xml如下:

<configuration>
    <configSections>
        <section name=”loggingConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings,
Microsoft.Practices.EnterpriseLibrary.Logging,
Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ requirePermission=”true” />
    </configSections>
    <loggingConfiguration name=”” tracingEnabled=”true” defaultCategory=”General”>
        <listeners>
            <add name=”Rolling Flat File Trace Listener” type=”Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener,
 Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                listenerDataType=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                formatter=”Text Formatter” rollInterval=”Day” rollSizeKB=”1024″
                maxArchivedFiles=”10″ />
        </listeners>
        <formatters>
            <add type=”Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                template=”Timestamp: {timestamp}{newline}
Message: {message}{newline} Category: {category}{newline}
Priority: {priority}{newline} EventId: {eventid}{newline}
Severity: {severity}{newline} Title:{title}{newline}
Machine: {localMachine}{newline} App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} – {value}{newline})}”
                name=”Text Formatter” />
        </formatters>
        <logFilters>
            <add type=”Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                enabled=”true” name=”Logging Enabled Filter” />
            <add type=”Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter,
Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″
                maximumPriority=”5″ name=”Priority Filter” />
        </logFilters>
        <categorySources>
            <add switchValue=”All” name=”General”>
                <listeners>
                    <add name=”Rolling Flat File Trace Listener” />
                </listeners>
            </add>
        </categorySources>
        <specialSources>
            <allEvents switchValue=”All” name=”All Events” />
            <notProcessed switchValue=”All” name=”Unprocessed Category” />
            <errors switchValue=”All” name=”Logging Errors & Warnings” />
        </specialSources>
    </loggingConfiguration>
</configuration>

四 代码示例

using System;

using System.Diagnostics;
using Microsoft.Practices.EnterpriseLibrary.Logging;

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;

namespace MyCommon
{
    public sealed class MyLogger
    {
        # region Static
        static MyLogger instance = null;
        static readonly object padlock = new object();
        public static MyLogger Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new MyLogger();
                        }
                    }
                }
                return instance;
            }
        }
        #endregion

        private LogWriter lw = null;
        private MyLogger()
        {
            lw = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
        }

        private void Log(string msg, TraceEventType tet)
        {
            if (lw.IsLoggingEnabled())
            {
                LogEntry le = new LogEntry();
                le.Message = msg;
                le.Severity = tet;
                lw.Write(le);
            }
        }

        public void Critical(string msg)
        {
            this.Log(msg, TraceEventType.Critical);
        }
        public void Error(string msg)
        {
            this.Log(msg, TraceEventType.Error);
        }
        public void Warning(string msg)
        {
            this.Log(msg, TraceEventType.Warning);
        }
        public void Info(string msg)
        {
            this.Log(msg,TraceEventType.Information);
        }

    }
}

 

 

完!

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注