• 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. 修改之后,再次运行测试,结果如下图所示:

  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/nianming/p/2259408.html
Copyright © 2020-2023  润新知