NLog 用于 C# (.NET):完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

NLog 用于 C# (.NET):完整指南及示例

\n\n

欢迎阅读适用于 .NET 平台的 NLog 库详细指南。NLog 是一个强大、灵活且高性能的日志记录系统,已成为许多 .NET 项目的实际标准。在本文中,我们将涵盖从安装到高级技术的所有内容,并提供真实的代码示例和优化建议。

\n\n

1. 什么是 NLog,为什么需要它?

\n\n

NLog(“.NET Logging”的缩写)是一个面向 .NET 平台的开源免费库,旨在实现灵活且高效的日志记录。它允许开发者将诊断信息(日志)写入各种目标位置:文件、控制台、数据库、网络套接字、监控系统(例如 Seq、Elasticsearch、Sentry)以及许多其他位置。

\n\n

为什么需要日志记录?在现代软件开发中,日志是应用程序的“黑匣子”。没有它们,就无法理解服务器为何崩溃、错误发生在何处、故障时正在处理哪些数据。NLog 通过提供以下功能解决了这个问题:

\n
    \n
  • 路由灵活性:可以为应用程序的不同部分配置不同的日志级别(Trace、Debug、Info、Warn、Error、Fatal)。
  • \n
  • 高性能:异步写入、延迟初始化,对运行速度影响极小。
  • \n
  • 可扩展性:数百个现成的目标(targets),并且可以编写自定义目标。
  • \n
  • 无需重新编译即可配置:可以通过 XML、JSON 或代码实时更改设置。
  • \n
\n\n

NLog 非常适合:Web 应用程序(ASP.NET Core)、控制台工具、微服务、桌面应用程序(WPF/WinForms)以及后台服务(Windows Services、Worker Services)。

\n\n

2. 安装

\n\n

通过 NuGet 包管理器安装 NLog。在 Visual Studio 的包管理器控制台或 .NET CLI 终端中执行以下任一命令:

\n\n
// 通过 .NET CLI(推荐)\ndotnet add package NLog\n\n// 通过包管理器控制台\nInstall-Package NLog\n\n// 对于 ASP.NET Core,还建议安装集成包:\ndotnet add package NLog.Web.AspNetCore
\n\n

安装后,您需要在项目根目录中创建一个配置文件 nlog.config(或通过代码配置 NLog)。

\n\n

3. 快速入门——最小工作示例

\n\n

创建一个控制台应用程序,并添加 nlog.config 文件(右键单击项目 → 添加 → 新建项 → XML 文件 → 命名为 nlog.config)。在其中粘贴以下内容:

\n\n
<?xml version="1.0" encoding="utf-8" ?>\n<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"\n      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n\n    <!-- 目标:日志写入位置 -->\n    <targets>\n        <target name="console" xsi:type="Console" layout="${longdate} | ${level:uppercase=true} | ${message} ${exception:format=ToString}" />\n        <target name="file" xsi:type="File" fileName="${basedir}/logs/app-${shortdate}.log"\n                layout="${longdate} | ${level:uppercase=true} | ${logger} | ${message} ${exception:format=ToString}" />\n    </targets>\n\n    <!-- 路由规则 -->\n    <rules>\n        <logger name="*" minlevel="Debug" writeTo="console,file" />\n    </rules>\n</nlog>
\n\n

现在,在 Program.cs 中编写代码:

\n\n
using NLog;\n\npublic class Program\n{\n    // 为当前类创建日志记录器\n    private static readonly Logger Logger = LogManager.GetCurrentClassLogger();\n\n    public static void Main(string[] args)\n    {\n        Logger.Info("应用程序已启动");\n        \n        try\n        {\n                    

推荐