天天看點

.NET開源項目介紹及資源推薦:日志記錄

在項目開發中,日志記錄是任何時候都少不了的,在本文中,将簡單介紹一下如下幾種日志記錄工具,以及推薦一些學習的資源:

1.Log4net

2.Logging Application Block

3.NLog

一.Log4net

Log4net是從java平台下非常優秀的日志記錄架構log4j上移植到.NET下的,它是apache基金資助的項目的一部分。Log4net可以幫助我們把日志資訊輸出到各種不同目标(文本檔案、資料庫、控制台等)的.net類庫,它可以容易的加載到開發項目中,實作程式調試和運作的時候的日志資訊輸出,提供了比.net自己提供的debug類和trace類的功能更多,使用起來也是非常的簡單。在Log4net 主要有四種重要的元件,分别是Logge, Repository, Appender以及 Layout,Log4net支援兩種不同的配置方式:配置檔案和代碼配置,一般情況下推薦使用配置檔案,一個完整的配置示例如下:

.NET開源項目介紹及資源推薦:日志記錄

<?xml version="1.0" encoding="utf-8" ?>

.NET開源項目介紹及資源推薦:日志記錄

<configuration>

.NET開源項目介紹及資源推薦:日志記錄

  <configSections>

.NET開源項目介紹及資源推薦:日志記錄

    <section name="log4net" 

.NET開源項目介紹及資源推薦:日志記錄

      type="log4net.Config.Log4NetConfigurationSectionHandler, 

.NET開源項目介紹及資源推薦:日志記錄

            log4net-net-1.0" />

.NET開源項目介紹及資源推薦:日志記錄

  </configSections>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

  <log4net>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    <root>

.NET開源項目介紹及資源推薦:日志記錄

      <level value="WARN" />

.NET開源項目介紹及資源推薦:日志記錄

      <appender-ref ref="AdoNetAppender" />

.NET開源項目介紹及資源推薦:日志記錄

      <appender-ref ref="ConsoleAppender" />

.NET開源項目介紹及資源推薦:日志記錄

    </root>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    <logger name="testApp.Logging">

.NET開源項目介紹及資源推薦:日志記錄

      <level value="DEBUG"/>

.NET開源項目介紹及資源推薦:日志記錄

    </logger>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">

.NET開源項目介紹及資源推薦:日志記錄

      <bufferSize value="100" />

.NET開源項目介紹及資源推薦:日志記錄

      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

.NET開源項目介紹及資源推薦:日志記錄

      <connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />

.NET開源項目介紹及資源推薦:日志記錄

      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />

.NET開源項目介紹及資源推薦:日志記錄

      <parameter>

.NET開源項目介紹及資源推薦:日志記錄

        <parameterName value="@log_date" />

.NET開源項目介紹及資源推薦:日志記錄

        <dbType value="DateTime" />

.NET開源項目介紹及資源推薦:日志記錄

        <layout type="log4net.Layout.RawTimeStampLayout" />

.NET開源項目介紹及資源推薦:日志記錄

      </parameter>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <parameterName value="@thread" />

.NET開源項目介紹及資源推薦:日志記錄

        <dbType value="String" />

.NET開源項目介紹及資源推薦:日志記錄

        <size value="255" />

.NET開源項目介紹及資源推薦:日志記錄

        <layout type="log4net.Layout.PatternLayout">

.NET開源項目介紹及資源推薦:日志記錄

          <conversionPattern value="%thread" />

.NET開源項目介紹及資源推薦:日志記錄

        </layout>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <parameterName value="@log_level" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <size value="50" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

          <conversionPattern value="%level" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <parameterName value="@logger" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

          <conversionPattern value="%logger" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <parameterName value="@message" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <size value="4000" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

          <conversionPattern value="%message" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <parameterName value="@exception" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

        <size value="2000" />

.NET開源項目介紹及資源推薦:日志記錄

        <layout type="log4net.Layout.ExceptionLayout" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    </appender>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    <appender name="ConsoleAppender" 

.NET開源項目介紹及資源推薦:日志記錄

              type="log4net.Appender.ConsoleAppender" >

.NET開源項目介紹及資源推薦:日志記錄

      <layout type="log4net.Layout.PatternLayout">

.NET開源項目介紹及資源推薦:日志記錄

        <param name="ConversionPattern" 

.NET開源項目介紹及資源推薦:日志記錄

           value="%d [%t] %-5p %c [%x] - %m%n" 

.NET開源項目介紹及資源推薦:日志記錄

        />

.NET開源項目介紹及資源推薦:日志記錄

      </layout>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

  </log4net>

.NET開源項目介紹及資源推薦:日志記錄

</configuration>

在該示例中,配置了兩種目标的輸出,分别為資料庫和控制台方式,在代碼中使用示例:

.NET開源項目介紹及資源推薦:日志記錄

Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

if (log.IsDebugEnabled)

.NET開源項目介紹及資源推薦:日志記錄

    log.Debug("message"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

if (log.IsInfoEnabled)

.NET開源項目介紹及資源推薦:日志記錄

   log.Info("message");

學習資料

二.Logging Application Block

Logging Application Block是微軟Enterprise Library其中的一個應用程式塊,可以使開發人員可以在其應用程式中內建标準的日志和監測功能,應用程式可以使用日志和監測塊在多個位置記錄事件,記錄的位置包括:事件日志(Event Log)、電子郵件(Email)、資料庫(DataBase)、文本檔案(TextFile)、消息隊列(MSMQ)、WMI、使用者自定義位置。并且使用Enterprise Library Configuration工具進行完全可視化配置,并且可以設定輸出日志資訊的格式。如圖所示:

配置完成後,所有的配置都放在了應用程式配置檔案裡面(針對EL2.0):

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging" />

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

  <loggingConfiguration tracingEnabled="true" defaultCategory="General">

.NET開源項目介紹及資源推薦:日志記錄

    <logFilters>

.NET開源項目介紹及資源推薦:日志記錄

      <add

.NET開源項目介紹及資源推薦:日志記錄

          name="Category"

.NET開源項目介紹及資源推薦:日志記錄

          type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging"

.NET開源項目介紹及資源推薦:日志記錄

          categoryFilterMode="AllowAllExceptDenied">

.NET開源項目介紹及資源推薦:日志記錄

        <categoryFilters>

.NET開源項目介紹及資源推薦:日志記錄

          <add name="UI Events" />

.NET開源項目介紹及資源推薦:日志記錄

        </categoryFilters>

.NET開源項目介紹及資源推薦:日志記錄

      </add>

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

          name="Priority"

.NET開源項目介紹及資源推薦:日志記錄

          type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging"

.NET開源項目介紹及資源推薦:日志記錄

          minimumPriority="2"

.NET開源項目介紹及資源推薦:日志記錄

                    />

.NET開源項目介紹及資源推薦:日志記錄

      <add name="LogEnabled Filter"

.NET開源項目介紹及資源推薦:日志記錄

        type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"

.NET開源項目介紹及資源推薦:日志記錄

        enabled="true" 

.NET開源項目介紹及資源推薦:日志記錄

           />

.NET開源項目介紹及資源推薦:日志記錄

    </logFilters>

.NET開源項目介紹及資源推薦:日志記錄

  </loggingConfiguration>

.NET開源項目介紹及資源推薦:日志記錄

在代碼中使用時非常簡單,如下代碼片斷所示:

.NET開源項目介紹及資源推薦:日志記錄

LogEntry logEntry = new LogEntry();

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

logEntry.EventId = 100;

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

logEntry.Priority = 2;

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

logEntry.Message = "Informational message";

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

//設定多個Category

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

logEntry.Categories.Add("Trace");

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

logEntry.Categories.Add("UI Events");

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

Logger.Write(logEntry);

關于Logging Application Block還應該提一下它的可擴充性,除了系統中預設的輸出目标之外,使用者可以自行擴充自己的目标,比如說控制台等;除此之外,使用者也可以擴充自己的日志輸出格式,比如說XML格式等。

學習資源

三.NLog

NLog是C#編寫的開源日志類庫,它的設計思想是使其簡單而靈活。NLog讓你處理診斷的日志消息,用相關資訊擴充消息,依照你的選擇格式化日志消息和把日志消息輸出到一個或多個目的地,基本上類似于Log4net。同樣,NLog也提供了很多的擴充,可以自定義日志輸出目标,日志格式,過濾器等。看一個簡單的配置示例:

.NET開源項目介紹及資源推薦:日志記錄

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 

.NET開源項目介紹及資源推薦:日志記錄

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

.NET開源項目介紹及資源推薦:日志記錄

  <targets>

.NET開源項目介紹及資源推薦:日志記錄

    <target name="console" xsi:type="ColoredConsole" 

.NET開源項目介紹及資源推薦:日志記錄

            layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}"/>

.NET開源項目介紹及資源推薦:日志記錄

    <target name="file" xsi:type="File" fileName="${basedir}/file.txt" 

.NET開源項目介紹及資源推薦:日志記錄

            layout="${stacktrace} ${message}"/>

.NET開源項目介紹及資源推薦:日志記錄

  </targets>

.NET開源項目介紹及資源推薦:日志記錄

  <rules>

.NET開源項目介紹及資源推薦:日志記錄

    <logger name="*" minlevel="Trace" writeTo="console,file"/>

.NET開源項目介紹及資源推薦:日志記錄

  </rules>

.NET開源項目介紹及資源推薦:日志記錄

</nlog>

在代碼中使用如下所示:

.NET開源項目介紹及資源推薦:日志記錄

static void C() 

.NET開源項目介紹及資源推薦:日志記錄

.NET開源項目介紹及資源推薦:日志記錄

    logger.Info("Info CCC"); 

.NET開源項目介紹及資源推薦:日志記錄

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

static void B() 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    logger.Trace("Trace BBB"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Debug("Debug BBB"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Info("Info BBB"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    C(); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    logger.Warn("Warn BBB"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Error("Error BBB"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Fatal("Fatal BBB"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

static void A() 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    logger.Trace("Trace AAA"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Debug("Debug AAA"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Info("Info AAA"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    B(); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    logger.Warn("Warn AAA"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Error("Error AAA"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Fatal("Fatal AAA"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

static void Main(string[] args) 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    logger.Trace("This is a Trace message"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Debug("This is a Debug message"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Info("This is an Info message"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    A(); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

    logger.Warn("This is a Warn message"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Error("This is an Error message"); 

.NET開源項目介紹及資源推薦:日志記錄

    logger.Fatal("This is a Fatal error message"); 

.NET開源項目介紹及資源推薦:日志記錄
.NET開源項目介紹及資源推薦:日志記錄

}

NLog雖然沒有提供可視化的配置工具,但是安裝後,我們會在VS2005的New Item裡面看到有關本NLog的配置檔案這麼一項,是用該配置檔案是支援自動補全功能的。

總結

以上簡單的介紹了.NET下的幾種開源日志記錄架構,如果你的系統整體架構都使用了Enterprise Library,那麼使用Logging Application Block更适合你;否則,如果使用了NHiberante或者Castle等資料持久架構,那麼選用Log4net将會更适合,因為在NH中本身就是用Log4net作為日志記錄工具的;在沒有使用任何其他架構的情況下,可以在以上幾種工具中自行選用,個人認為它們都很優秀!

本文轉自lihuijun51CTO部落格,原文連結: http://blog.51cto.com/terrylee/67594,如需轉載請自行聯系原作者