65.9K
CodeProject 正在变化。 阅读更多。
Home

log4net日志库的简要介绍(使用C#)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.46/5 (100投票s)

2004年9月10日

4分钟阅读

viewsIcon

626189

downloadIcon

11433

一篇介绍log4net库基本用法的文章。

什么是log4net

Log4net是一个开源库,允许.NET应用程序将输出记录到各种来源(例如,控制台、SMTP或文件)。Log4net是流行的Java日志库log4J的移植版本。有关log4net的详细信息,请访问其项目主页

在这篇文章中,我将概述该库的工作原理以及一些不同日志记录选项的示例。

下载库

log4net库可以从项目主页下载。最新的发行版包含log4net的MONO、.NET 1.0和1.1以及.NET Compact Framework版本。

log4net提供什么?

Log4net提供了一个简单的机制,用于将信息记录到各种来源。信息通过一个或多个日志记录器进行记录。这些日志记录器提供5个日志级别

  1. Debug
  2. 信息
  3. 警告
  4. Error(错误)
  5. Fatal(致命)

希望(!!)每个级别的日志记录量会随着列表的下降而减少(我们想要比致命错误更多的调试信息!)。可以指定特定日志记录器的日志级别,因此在开发过程中,所有5个级别的日志都可以输出以辅助开发。当您的应用程序部署后,您可能决定只将级别5(致命错误)输出到日志文件中。这取决于您,并且一切都易于配置。

那么,日志信息去哪里了?嗯,日志信息去了一个叫做“Appender”(附加器)的东西。附加器基本上是日志信息将要去的目的地。在这篇文章中,我将提供ConsoleAppender(控制台附加器)和FileAppender(文件附加器)的示例。存在许多其他附加器,允许将数据记录到数据库、电子邮件、网络广播等。您不限于只使用一个附加器,您可以配置任意数量的附加器供使用。附加器的配置在代码之外的XML文件中进行,因此正如我们稍后将看到的,更改日志配置是一个简单的事情。

好的,我们知道我们可以使用日志记录器将数据输出到多个附加器,但信息将被记录成什么格式?嗯,log4net有许多可以用于每个附加器的layout(布局)。这些布局指定日志是作为简单的文本数据还是XML文件生成,或者是否带有时间戳等。

开始日志记录

好的,我相信您已经读了足够多的关于日志记录的内容,现在想看一些代码,看看它是如何工作的。好吧,开始吧。我们第一个(极其简单)的示例程序(LogTest.exe)如下所示:

using log4net;
using log4net.Config;

public class LogTest
{
    private static readonly ILog logger = 
           LogManager.GetLogger(typeof(LogTest));
    
    static void Main(string[] args)
    {
        BasicConfigurator.Configure();
        
        logger.Debug("Here is a debug log.");
        logger.Info("... and an Info log.");
        logger.Warn("... and a warning.");
        logger.Error("... and an error.");
        logger.Fatal("... and a fatal error.");
    }
}

您可以看到这个小型应用程序中有几行有趣的语句。第一个是创建Logger(日志记录器)的地方。

private static readonly ILog logger = 
          LogManager.GetLogger(typeof(LogTest));

这为LogTest类创建了一个日志记录器。您不必为每个类都使用不同的日志记录器,您可以使用不同的日志记录器来处理代码中的不同部分或包。日志记录器的类会输出到日志中,这样您就知道任何日志信息来自哪里。

下一个有趣的语句是:

BasicConfigurator.Configure();

此方法初始化log4net系统以使用简单的控制台附加器。使用这个可以让我们快速了解log4net的工作原理,而无需设置不同的附加器。不过别担心,设置附加器并不困难,我们稍后会看看。

最后,如果您运行该应用程序,您可以看到不同级别的日志输出——在本例中,输出到控制台:

0 [2436] DEBUG LogTest  - Here is a debug log.
31 [2436] INFO LogTest  - ... and an Info log.
31 [2436] WARN LogTest  - ... and a warning.
31 [2436] ERROR LogTest  - ... and an error.
31 [2436] FATAL LogTest  - ... and a fatal error.

指定附加器

现在,让我们更改测试应用程序,使其从“.config”文件中加载log4net配置信息。这是通过移除BasicConfigurator并使用DOMConfigurator来实现的,就像在示例应用程序LogTest2中所示。

using log4net;
using log4net.Config;

public class LogTest2
{
    private static readonly ILog logger = 
          LogManager.GetLogger(typeof(LogTest2));
    
    static LogTest2()
    {
        DOMConfigurator.Configure();
    }

    static void Main(string[] args)
    {
        logger.Debug("Here is a debug log.");
        logger.Info("... and an Info log.");
        logger.Warn("... and a warning.");
        logger.Error("... and an error.");
        logger.Fatal("... and a fatal error.");
    }
}

现在我们正在使用DOMConfigurator,我们需要指定我们的附加器和布局。这在应用程序的.config文件中,“LogTest2.exe.config”中完成。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" 
           type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <param name="File" value="LogTest2.txt" />
            <param name="AppendToFile" value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <param name="Header" value="[Header]\r\n" />
                <param name="Footer" value="[Footer]\r\n" />
                <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
            </layout>
        </appender>
        
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
            <layout type="log4net.Layout.PatternLayout">
                <param name="Header" value="[Header]\r\n" />
                <param name="Footer" value="[Footer]\r\n" />
                <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
            </layout>
        </appender>

        <root>
            <level value="INFO" />
            <appender-ref ref="LogFileAppender" />
            <appender-ref ref="ConsoleAppender" />
        </root>
    </log4net>
</configuration>

在此XML文件中,您可以看到指定了两个附加器:LogFileAppender和ConsoleAppender。我们还有一个根附加器。它指定了我们正在使用的附加器以及我们希望在日志中看到的输出级别——在这种情况下,是从INFO开始的所有内容(即,除了DEBUG之外的所有内容)。LogFileAppender指定使用哪个文件以及是追加到现有文件的末尾还是不追加。两个附加器都使用一个通用的布局,该布局指定了哪些信息被输出到日志中。我们可以看到日期(%d)、时间(%t)、日志级别(%p)、日志记录器名称(%c)和消息(%m)被输出。

如果您现在运行应用程序LogTest2,控制台上将显示以下输出:

2004-09-10 12:53:48,062 [1216] INFO  LogTest2  - ... and an Info log.
2004-09-10 12:53:48,078 [1216] WARN  LogTest2 - ... and a warning.
2004-09-10 12:53:48,078 [1216] ERROR LogTest2 - ... and an error.
2004-09-10 12:53:48,078 [1216] FATAL LogTest2 - ... and a fatal error.

如果您查看“LogTest2.txt”文件,您会发现它包含相同的信息。

好了,这就是log4net功能的一个简要概述,而且我们只是初步接触了它。Log4net提供了许多其他功能,我建议您获取一份副本试试。

© . All rights reserved.