zoukankan      html  css  js  c++  java
  • 企业库 Logging block

    一 Logging Block

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

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

    1)The event log

    2)An e-mail message

    3)A database

    4)A message queue

    5)A text file

    6)A Windows® Management Instrumentation (WMI) event

    7)Custom locations using application block extension points

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

    Logging Block的主要对象:

    1) log entity对象, log entity可以理解为一条log记录;
    2) log writer为全局的log 管理对象,包含了所有log相关的操作;

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

    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 ;

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

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

     

    Logging Block的执行过程:

    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的执行过程如下图:

     


    三 Logging Block的配置

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

    例如以上的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 &amp; 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);
            }


        }
    }

    完!

  • 相关阅读:
    C语言博客作业04--数组
    DS博客作业04--树大作业
    Java课程设计
    JAVA课设-五子棋-团队博客
    yue
    Java扫雷设计
    java课设--五子棋
    软件工程-个人总结
    JAVA课程设计个人博客
    JAVA第09次实验(IO流)
  • 原文地址:https://www.cnblogs.com/itech/p/2107700.html
Copyright © 2011-2022 走看看