设置 log4net

让我们创建一个简单的 Hello World 控制台应用程序,并使用 log4net 将某些内容记录到控制台。一旦我们运行了这个,我们可以在以下示例中将其扩展为在实际开发场景中使用它。让我们从小开始,从那里建立起来。

首先,我们需要在 Visual Studio 和 WriteLine("Hello World") 中创建一个简单的 Console 项目,如下所示

StackOverflow 文档

接下来,我们需要将 log4net 库添加到我们的项目中。因此,我们需要右键单击 References 并选择 Manage NuGet Packages

StackOverflow 文档

然后搜索 log4net 并安装

StackOverflow 文档

我们现在已成功将 log4net.dll 添加到我们的项目中。

现在我们需要配置 app.config ( 如果它是 web 应用程序,则为 web.config )。这部分有点棘手,但不要惊慌。我们将逐步完成它并进行日志记录和运行。

app.config 下我们首先需要在配置下创建一个配置部分。我们需要提供如下所示的名称和类型:

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>

我们在这里所做的是我们要在我们的配置文件中创建一个名为 log4net 的部分,需要查找。与伐木有关的一切都将在这里。从创建我们的日志文件,如何长,以及需要记录什么信息。现在让我们继续创建 log4net 部分。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    
  </log4net>
  <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

我们要在 log4net 部分添加的第一件事是一个 appender。appender 基本上是一个日志工具。这是我们想要记录日志的内容。有许多可用于登录文件,数据库等的 appender。在这个例子中,我们将登录到 Console Window,所以让我们创建一个 Console Appender:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  
  </appender>
</log4net>

接下来,我们需要定义一个布局:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
    
    </layout>
  </appender>
</log4net>

在布局下,我们将定义我们想要在控制台上显示的内容以及我们希望如何显示它。为此,我们需要一种转换模式。我们可以使用许多不同类型的模式,对于这个例子,我们将坚持一个相当简单的模式。

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newline"/>
    </layout>
  </appender>
</log4net>

我们上面所做的是说我们需要以下信息:绝对时间戳,抛出异常的运行线程和日志记录级别。log4net 提供了 7 个日志记录级别。

  • 关 - 没有记录任何内容(无法调用)
  • 致命
  • 错误
  • 警告
  • 信息
  • DEBUG
  • ALL - 一切都记录下来(无法调用)

但是,在 7 中我们只能使用 5(DEBUG,INFO,WARN,ERROR 和 FATAL)。将日志记录级别声明为 DEBUG 意味着它将记录所有内容,即 DEBUG,INFO,WARN,ERROR 和 FATAL。但是,将日志记录级别声明为 WARN 将仅记录 WARN,ERROR 和 FATAL。希望你了解层次结构。

app.config 下我们需要的最后一件事是根部分。根部分包含我们的顶级记录器和登录级别。重要的是要理解一切都从 root 继承,因此除非在根目录下引用,否则不会记录 appender。添加后,这就是你的 app.config 应该是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<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="%date{ABSOLUTE} [%thread] %level %logger - %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
  <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration> 

复制粘贴配置文件的部分并不是一个坏主意,但重要的是要了解它们的责任。现在我们已经完成了 app.config 的配置,我们需要在 Console Project 中添加一些代码。首先,我们需要定义一个需要放在类之外的一次性条目。

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

将它放在 Program.cs 文件中的 using 语句下面。接下来,我们需要创建一个 logger 实例来将其用于日志记录。每节课一次。

private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

最后,我们需要记录一些东西

log.Error("This is my error");

你的 Program.cs 文件应该是这样的:

using System;

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

namespace Log4netTutorial
{
    class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");
            log.Error("This is my error");

            Console.ReadLine();
        }
    }
}

继续运行程序,你应该在控制台中记录你的错误:

StackOverflow 文档