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 小节中,笔者创建了一个新的 .NET Framework 控制台项目。解决方案名称为 “Log4NetDemo”, 项目名称为 “ConsoleApp4DotNetFramework”:
项目目标框架为 .NET Framework 4.8.1
-
前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:
-
在打开的标签页中切换到【浏览】页面,搜索 “Log4Net” 并选中;在右方的配置页面勾选要安装的项目,点击【安装】按钮:
-
安装完成后,可以看到解决方案资源管理器内新增了一个
package.config
文件:
内容如下:
1.3、配置 Log4Net
-
完成 1.2 小节的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到“应用程序配置文件” C# 项,修改文件名为
log4net.config
,点击【添加】: -
在解决方案资源管理器内右击
log4net.config
,点击【属性】,将“复制到输出目录”属性的值修改为“如果较新则复制”: -
双击打开
log4net.config
文件,将其修改为以下内容并保存:<?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>
-
在解决方案资源管理器内展开项目下的
Properties
属性文件夹,可以看到下属有一个AssemblyInfo.cs
的文件,双击打开该文件: -
在该文件的末尾附加如下内容并保存:
// 指定log4net 的配置文件 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
1.4、测试 Log4Net
-
在解决方案资源管理器内双击打开
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、为 .NET 项目配置 Log4Net
2.1、先决条件
- 一个简单的 .NET 项目(比如:使用 Visual Studio 创建 .NET 控制台应用程序)。
2.2、引用 Log4Net NuGet 包
-
在 2.1 小节中,笔者在解决方案 “Log4NetDemo” 中继续新建了一个 .NET 控制台项目, 项目名称为 “ConsoleApp4DotNet”。设置该项目为启动项目:
目标框架为 .NET 6.0
-
前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:
-
在打开的标签页中切换到【已安装】页面,选中 “Log4Net”;在右方的配置页面勾选要安装的项目,点击【安装】按钮:
-
安装完成后,在解决方案资源管理器内双击项目名称打开项目(
.csproj
)文件,可以看到项目文件中添加了对 Log4Net NuGet 包的引用:package.config
orPackageReference
?
2.3、配置 Log4Net
-
完成 2.2 小节的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到“应用程序配置文件” C# 项,修改文件名为
log4net.config
,点击【添加】: -
在解决方案资源管理器内右击
log4net.config
,点击【属性】,将“复制到输出目录”属性的值修改为“如果较新则复制”: -
双击打开
log4net.config
文件,将其修改为以下内容并保存:<?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>
-
由于 .NET Core 项目中,
AssemblyInfo.cs
文件是自动生成的。所以我们无法在解决方案树内找到该文件。我们可以选择关闭自动生成(参考这里),手动创建。不过还是算了,让我们直接使用编程方式指定 log4net 的配置文件吧(见下一节)。AssemblyInfo.cs
(参考这里以及这里),最后使用 assembly-level attribute 来配置 log4net
2.4、测试 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
的日志文件,内容如下: