天天看点

.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,如需转载请自行联系原作者