(三)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 的日志文件,内容如下:

相关推荐
hccee2 小时前
C# IO文件操作
开发语言·c#
广煜永不挂科4 小时前
Devexpress.Dashboard的调用二义性
c#·express
zhy8103026 小时前
.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署
pdf·.net·excel
初九之潜龙勿用6 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
慧都小妮子7 小时前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net
吾与谁归in8 小时前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式
吾与谁归in8 小时前
【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
设计模式·c#·责任链模式
神仙别闹9 小时前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
霍先生的虚拟宇宙网络9 小时前
.net 支持跨平台(桌面)系列技术汇总
.net
djk88889 小时前
.net的winfrom程序 窗体透明&打开窗体时出现在屏幕右上角
.net