NHibernate初学者指南(12):日志


几乎所有的程序都需要日志记录功能。目前为止,已经存在很多提供日志记录功能的框架,我们没必要自己实现,只需要使用它们中的一个即可。.NET中最知名和成熟的日志记录框架是Log4Net。这是一个开源框架,由NHibernate使用。

为程序添加日志记录

在这个小练习中,我们将创建一个实例程序并配置其使用Log4Net日志记录框架,然后创建一些基本的日志记录信息。

1. 打开Visual Studio,创建一个控制台应用程序:LoggingSample。

2. 添加对log4net.dll程序集的引用。

3. 右击LoggingSample项目,选择属性,在Application选项卡中,设置Target framework为.NET Framework 4。

4. 为项目添加一个配置文件App.config,如果已经存在了,就不用添加了。在配置文件中配置应用程序通过定义log4net节使用Log4Net,代码如下:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net"/>
  </configSections>
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%C.%M] %-5p %m%n"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="ConsoleAppender"/>
    </root>
  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

上面的代码中定义了一个log4net节。conversionPattern描述日志输出应如何格式化,appender是告诉Log4Net应该使用哪个appender,level是定义我们想启用的输出级别。该级别从低到高是DEBUG<INFO<WARN<ERROR<FATALNONE。

5. 在Program类中,为该类文件添加XmlConfigurator特性,注意添加到命名空间上面:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

7. 在Program类中,添加并初始化一个类型为ILog的静态类级别变量,如下面的代码所示:

private static readonly ILog log = LogManager.GetLogger(typeof(Program));

8. 使用logger产生一些不同级别的的日志信息。代码如下:

static void Main(string[] args)
{
    log.Debug("This is a Debug message.");
    log.Info("This is a Info message.");
    log.Warn("This is a Warn message.");
    log.Error("This is a Error message.");
    log.Fatal("This is a Fatal message.");

    Console.Write("\r\nHit enter to exit:");
    Console.ReadLine();
}

9. 运行程序,结果如下图所示:

10. 在App.config中,修改日志记录级别为WARN,再次运行程序,如下图所示:

在NHibernate中启用日志记录

如前面所述,NHibernate使用Log4Net生成日志信息。现在我们已经对Log4Net的相关知识有了一定理解以及如何配置它们,根据程序需求我们可以使用这些知识为NHibernate设置日志记录。

1. 打开上一篇的OrderingSystem解决方案。

2. 在OrderingSystem.Tests中添加对log4net.dll的引用。

3. 为OrderingSystem.Tests添加一个App.config配置文件,代码如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net"
    type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net" />
  </configSections>
  <log4net debug="false">
    <appender name="console"
    type="log4net.Appender.ConsoleAppender, log4net">
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern"
        value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="console" />
    </root>
  </log4net>
</configuration>

4. 打开entity_mapping_specs类,添加代码为单元测试初始化日志记录,如下所示:

protected override void BeforeAllTests()
{
    base.BeforeAllTests();
    log4net.Config.XmlConfigurator.Configure();
}

5. 运行测试,结果如下图所示:

6. 这是全部的信息,但是我们想减少它。NHibernate定义了两个logger:NHibernate和NHibernate.SQL。我们可以分别配置这两个logger。在App.config文件中<root>标签前边添加如下代码:

    <logger name="NHibernate">
      <level value="WARN"/>
    </logger>
    <logger name="NHibernate.SQL">
      <level value="ALL"/>
    </logger>

7. 修改之后,再次运行测试,结果如下图所示:

posted @ 2011-11-22 20:20  BobTian  阅读(3433)  评论(3编辑  收藏  举报