(三)Apache log4net™ 手册 -演示

0、引言

在开始本文之前,推荐您首先阅读 Apache log4net™ 手册中有关 介绍配置 的相关内容。本文将通过实践分别为您演示如何使用 Visual Studio 2022 在 .NET Framework 项目和 .NET 项目下配置并使用 Log4Net。

1、为 .NET Framework 项目配置 Log4Net

1.1、先决条件

  • 一个简单的 .NET Framework 项目(比如:控制台应用(.NET Framework))

1.2、引用 Log4Net NuGet 包

  1. 在 [1.1 小节](#1.1 小节)中,笔者创建了一个新的 .NET Framework 控制台项目。解决方案名称为 "Log4NetDemo ", 项目名称为 "ConsoleApp4DotNetFramework ":

    项目目标框架为 .NET Framework 4.8.1

  2. 前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:

  3. 在打开的标签页中切换到【浏览】页面,搜索 "Log4Net" 并选中;在右方的配置页面勾选要安装的项目,点击【安装】按钮:

  4. 安装完成后,可以看到解决方案资源管理器内新增了一个 package.config 文件:

    内容如下:

1.3、配置 Log4Net

  1. 完成 [1.2 小节](#1.2 小节)的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到"应用程序配置文件" C# 项,修改文件名为 log4net.config,点击【添加】:

  2. 在解决方案资源管理器内右击 log4net.config,点击【属性】,将"复制到输出目录"属性的值修改为"如果较新则复制":

  3. 双击打开 log4net.config 文件,将其修改为以下内容并保存:

    xml 复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
        <!-- 定义一个控制台 appender -->
        <appender name="Console" type="log4net.Appender.ConsoleAppender">
            <!-- 日志输出格式 -->
            <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
            </layout>
        </appender>
        
        <!-- 定义一个文件 appender -->
        <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
            <!-- 保存文件的名称 -->
            <file value="example.log" />
            <appendToFile value="true" />
            <!-- 文件的编码方式 -->
            <param name="Encoding" value="UTF-8"/>
            <!-- 每个文件的大小 -->
            <maximumFileSize value="100KB" />
            <!-- 保存文件数量 -->
            <maxSizeRollBackups value="2" />
    
            <!-- 日志输出格式 -->
            <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %thread %logger - %message%newline" />
            </layout>
        </appender>
        
        <!-- 定义 root logger 的配置 -->
        <root>
            <!-- 定义 root logger 的日志级别 -->
            <level value="ALL" />
            <!-- 引用 Console appender -->
            <appender-ref ref="Console" />
            <!-- 引用 RollingFile appender -->
            <appender-ref ref="RollingFile" />
        </root>
    </log4net>
  4. 在解决方案资源管理器内展开项目下的 Properties 属性文件夹,可以看到下属有一个 AssemblyInfo.cs 的文件,双击打开该文件:

  5. 在该文件的末尾附加如下内容并保存:

    csharp 复制代码
    // 指定log4net 的配置文件
    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

1.4、测试 Log4Net

  1. 在解决方案资源管理器内双击打开 Program.cs,将其修改为以下内容并保存:

    csharp 复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp4DotNetFramework
    {
        internal class Program
        {
            // 定义一个静态 logger 变量,其引用名为 "Program" 的 Logger 实例
            private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
            static void Main(string[] args)
            {
                log.Debug("开始调试");
                log.Info("Entering application.");
                log.Warn("警告");
                log.Error("错误", new Exception("异常信息"));
                log.Fatal("致命错误", new Exception("异常信息"));
                Console.ReadKey();
            }
        }
    }
  2. 运行项目,将得到以下输出:

  3. 在应用程序的基目录将会生成一个名为 example.log 的日志文件,内容如下:

2、为 .NET 项目配置 Log4Net

2.1、先决条件

2.2、引用 Log4Net NuGet 包

  1. 在 [2.1 小节](#2.1 小节)中,笔者在解决方案 "Log4NetDemo " 中继续新建了一个 .NET 控制台项目, 项目名称为 "ConsoleApp4DotNet "。设置该项目为启动项目:

    目标框架为 .NET 6.0

  2. 前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:

  3. 在打开的标签页中切换到【已安装】页面,选中 "Log4Net";在右方的配置页面勾选要安装的项目,点击【安装】按钮:

  4. 安装完成后,在解决方案资源管理器内双击项目名称打开项目(.csproj)文件,可以看到项目文件中添加了对 Log4Net NuGet 包的引用:

    package.config or PackageReference?

2.3、配置 Log4Net

  1. 完成 [2.2 小节](#2.2 小节)的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到"应用程序配置文件" C# 项,修改文件名为 log4net.config,点击【添加】:

  2. 在解决方案资源管理器内右击 log4net.config,点击【属性】,将"复制到输出目录"属性的值修改为"如果较新则复制":

  3. 双击打开 log4net.config 文件,将其修改为以下内容并保存:

    xml 复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
        <!-- 定义一个控制台 appender -->
        <appender name="Console" type="log4net.Appender.ConsoleAppender">
            <!-- 日志输出格式 -->
            <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
            </layout>
        </appender>
        
        <!-- 定义一个文件 appender -->
        <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
            <!-- 保存文件的名称 -->
            <file value="example.log" />
            <appendToFile value="true" />
            <!-- 文件的编码方式 -->
            <param name="Encoding" value="UTF-8"/>
            <!-- 每个文件的大小 -->
            <maximumFileSize value="100KB" />
            <!-- 保存文件数量 -->
            <maxSizeRollBackups value="2" />
    
            <!-- 日志输出格式 -->
            <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %thread %logger - %message%newline" />
            </layout>
        </appender>
        
        <!-- 定义 root logger 的配置 -->
        <root>
            <!-- 定义 root logger 的日志级别 -->
            <level value="ALL" />
            <!-- 引用 Console appender -->
            <appender-ref ref="Console" />
            <!-- 引用 RollingFile appender -->
            <appender-ref ref="RollingFile" />
        </root>
    </log4net>
  4. 由于 .NET Core 项目中,AssemblyInfo.cs 文件是自动生成的。所以我们无法在解决方案树内找到该文件。我们可以选择关闭自动生成(参考这里),手动创建 AssemblyInfo.cs(参考这里以及这里),最后使用 assembly-level attribute 来配置 log4net。不过还是算了,让我们直接使用编程方式指定 log4net 的配置文件吧(见下一节)。

2.4、测试 Log4Net

  1. 在解决方案资源管理器内双击打开 Program.cs,将其修改为以下内容并保存:

    csharp 复制代码
    public class Program
    {
        // 定义一个静态 logger 变量,其引用名为 "Program" 的 Logger 实例
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
    
        static void Main(string[] args)
        {
            // 使用 XmlConfigurator 直接读取 XML 文件并使用它来配置 log4net
            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
    
            log.Debug("开始调试");
            log.Info("Entering application.");
            log.Warn("警告");
            log.Error("错误", new Exception("异常信息"));
            log.Fatal("致命错误", new Exception("异常信息"));
        }
    }
  2. 运行项目,将得到以下输出:

  3. 在应用程序的基目录将会生成一个名为 example.log 的日志文件,内容如下:

相关推荐
一个程序员(●—●)16 分钟前
委托的注册及注销+观察者模式
开发语言·c#
白茶等风1213810 小时前
C#_结构(Struct)详解
开发语言·c#
JosieBook11 小时前
【.NET全栈】ASP.NET实战—基于ASP.NET的求职系统设计与实现
后端·asp.net·.net
dangoxiba11 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第七集:制作小骑士完整的冲刺Dash行为
游戏·unity·c#·游戏引擎·playmaker
小薯仔11 小时前
.net 之内存回收
.net·gc·垃圾回收
.Net Core 爱好者12 小时前
ASP .NET CORE 6 项目实现WebSocket通信实践
网络·websocket·网络协议·c#·.net·.netcore·visual studio
__water13 小时前
『功能项目』QFrameWorkBug关联Slot(插槽)【67】
c#·unity引擎·关联slot
秋月的私语15 小时前
c# 线程等待变量的值符合条件
java·jvm·c#
jyl_sh15 小时前
Windows Ribbon框架
windows·ribbon·c#·客户端