在开始本文之前,推荐您首先阅读 Apache log4net™ 手册中有关 介绍 与 配置 的相关内容。本文将通过实践分别为您演示如何使用 Visual Studio 2022 在 .NET Framework 项目和 .NET 项目下配置并使用 Log4Net。
在 1.1 小节中,笔者创建了一个新的 .NET Framework 控制台项目。解决方案名称为 “Log4NetDemo”, 项目名称为 “ConsoleApp4DotNetFramework”:
项目目标框架为 .NET Framework 4.8.1
前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:
在打开的标签页中切换到【浏览】页面,搜索 “Log4Net” 并选中;在右方的配置页面勾选要安装的项目,点击【安装】按钮:
安装完成后,可以看到解决方案资源管理器内新增了一个 package.config
文件:
内容如下:
完成 1.2 小节的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到“应用程序配置文件” C# 项,修改文件名为 log4net.config
,点击【添加】:
在解决方案资源管理器内右击 log4net.config
,点击【属性】,将“复制到输出目录”属性的值修改为“如果较新则复制”:
双击打开 log4net.config
文件,将其修改为以下内容并保存:
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
layout>
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>
<level value="ALL" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
root>
log4net>
在解决方案资源管理器内展开项目下的 Properties
属性文件夹,可以看到下属有一个 AssemblyInfo.cs
的文件,双击打开该文件:
在该文件的末尾附加如下内容并保存:
// 指定log4net 的配置文件
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
在解决方案资源管理器内双击打开 Program.cs
,将其修改为以下内容并保存:
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();
}
}
}
运行项目,将得到以下输出:
在应用程序的基目录将会生成一个名为 example.log
的日志文件,内容如下:
在 2.1 小节中,笔者在解决方案 “Log4NetDemo” 中继续新建了一个 .NET 控制台项目, 项目名称为 “ConsoleApp4DotNet”。设置该项目为启动项目:
目标框架为 .NET 6.0
前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:
在打开的标签页中切换到【已安装】页面,选中 “Log4Net”;在右方的配置页面勾选要安装的项目,点击【安装】按钮:
安装完成后,在解决方案资源管理器内双击项目名称打开项目(.csproj
)文件,可以看到项目文件中添加了对 Log4Net NuGet 包的引用:
完成 2.2 小节的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到“应用程序配置文件” C# 项,修改文件名为 log4net.config
,点击【添加】:
在解决方案资源管理器内右击 log4net.config
,点击【属性】,将“复制到输出目录”属性的值修改为“如果较新则复制”:
双击打开 log4net.config
文件,将其修改为以下内容并保存:
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
layout>
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>
<level value="ALL" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
root>
log4net>
由于 .NET Core 项目中,AssemblyInfo.cs
文件是自动生成的。所以我们无法在解决方案树内找到该文件。我们可以选择关闭自动生成(参考这里),手动创建 。不过还是算了,让我们直接使用编程方式指定 log4net 的配置文件吧(见下一节)。AssemblyInfo.cs
(参考这里以及这里),最后使用 assembly-level attribute 来配置 log4net
在解决方案资源管理器内双击打开 Program.cs
,将其修改为以下内容并保存:
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("异常信息"));
}
}
运行项目,将得到以下输出:
在应用程序的基目录将会生成一个名为 example.log
的日志文件,内容如下: