
NLog C#(开发者如何使用)
日志记录是软件开发的一个重要方面。 它帮助开发人员跟踪应用程序的行为、解决问题,并获得有关代码在各种环境中的性能的见解。 NLog 是一个流行的 C# 日志框架,使在应用程序中实现健壮和灵活的日志记录变得容易。 在这本全面的指南和教程中,我们将探索 C# 中的 NLog.
NLog 是什么?
NLog 是一个免费的开源 .NET 和 .NET Core 应用程序的日志库。 它提供了一种灵活且高度可配置的方式来记录应用程序中的消息。 NLog 是 .NET 生态系统中使用广泛的免费日志平台,因为它的性能、可扩展性和易用性。
NLog 入门
我们可以在 ASP.NET Web 应用程序、ASP.NET Web API、Windows 窗体应用程序、ASP.NET MVC 应用程序或根据我们的需要的任何类型中使用 NLog. 我们将使用控制台应用程序演示所有用例。
安装NLog NuGet包
要开始使用 NLog,您需要在项目中安装 NLog NuGet 包。 您可以通过 Visual Studio 的 NuGet 包管理器按照以下步骤进行操作:
- 在"工具"菜单中选择"NuGet 包管理器",然后选择"为解决方案管理 NuGet 包"。
- 或者,在解决方案资源管理器中右键单击您的项目,选择"管理 NuGet 包",然后选择"浏览"。
- 在 NuGet 包管理器窗口中,单击"浏览"选项卡,然后在搜索框中输入"NLog"。
- 您应该在搜索结果中看到 NLog 包。 点击选择。
- 在 NuGet 包管理器窗口的右侧,有一个包含您的解决方案中的项目的列表。 选择要安装 NLog 的项目。
- 从版本下拉菜单中选择所需的 NLog 包版本。 如果需要,您可以选择最新的稳定版本或特定版本。
- 选择项目和版本后,单击"安装"按钮以开始安装过程。
NuGet 包管理器将下载并安装 NLog 和任何依赖项。 您将在输出窗口中看到进度。
NLog 现已成功安装在您的项目中,您可以在 C# 代码中开始使用它进行日志记录。
创建 NLog 配置文件
要创建 NLog 配置文件(通常命名为 nlog.config),您可以按照以下步骤进行。 此配置文件将指定 NLog 在应用程序中的行为方式,包括日志目标、布局渲染器和规则。
在您的项目中,右键单击项目或要创建配置文件的目标文件夹。
- 选择"添加">"新建项目..."。
- 在"添加新项目"对话框中,搜索"XML 文件"或"XML"并选择。
- 将文件命名为 nlog.config 并单击"添加"按钮。

- 使用文本编辑器或 XML 编辑器打开新创建的 nlog.config 文件。
- 在 NLog.XML 文件中添加以下配置。下方是记录消息到控制台目标的 NLog 配置的基本示例。 您可以自定义此配置文件以满足您的需要:
配置文件
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Define targets -->
<targets>
<!-- Log to a console -->
<target name="console" xsi:type="Console" layout="${longdate}|${message}"/>
</targets>
<!-- Define rules -->
<rules>
<!-- All messages with a minimum log level of Debug or higher are written to the Console -->
<logger name="*" minlevel="Debug" writeTo="console" />
</rules>
</nlog>
在C#代码中,确保从nlog.config文件加载NLog配置。您通常在应用程序启动代码中执行此操作,例如在ASP.NET Core Startup.cs(适用于.NET版本相同或低于.NET 5),program.cs文件(适用于.NET 6或更高版本),或控制台应用程序的Main方法中:
using NLog;
internal class Program
{
// Create an instance of the Logger
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
// Log a debug message
logger.Debug("This is a Debug Message");
// Pause the console for viewing output
Console.Read();
}
}Imports NLog
Friend Class Program
' Create an instance of the Logger
Private Shared logger As Logger = LogManager.GetCurrentClassLogger()
Shared Sub Main(args As String())
' Log a debug message
logger.Debug("This is a Debug Message")
' Pause the console for viewing output
Console.Read()
End Sub
End Class上述程序的输出如下所示:

在此示例中,我们创建了一个 Logger 类的实例,并使用它记录 Debug Level 的消息。 让我们探索 NLog 支持的跟踪级别。
日志级别
NLog 支持多个日志级别,每个级别都有其自身的重要性:
- Trace:最详细的级别,通常用于诊断。
- Debug:用于调试信息,有助于开发。
- Info:有关应用程序操作的一般信息。
- Warn:指示不会影响应用程序的潜在问题。
- Error:指示应调查的失败,但不一定会导致应用程序崩溃。
- Fatal:表示应立即处理的严重失败。
通过将日志消息分类为这些级别,您可以根据严重性轻松过滤和优先排序它们。
在您的nLog.Config文件的rules标签中设置minlevel="Trace",如下所示。
<rules>
<!-- All messages with a minimum log level of Trace or higher are written to the Console -->
<logger name="*" minlevel="Trace" writeTo="console" />
</rules>
让我们编写代码来记录所有跟踪级别的消息。
using NLog;
internal class Program
{
// Create an instance of the Logger
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
// Log messages of different tracking levels
logger.Trace("This is a Trace Message");
logger.Debug("This is a Debug Message");
logger.Info("This is an Info Message");
logger.Warn("This is a Warning Message");
logger.Error("This is an Error Message");
logger.Fatal("This is a Fatal Message");
// Pause the console for viewing output
Console.Read();
}
}Imports NLog
Friend Class Program
' Create an instance of the Logger
Private Shared logger As Logger = LogManager.GetCurrentClassLogger()
Shared Sub Main(ByVal args() As String)
' Log messages of different tracking levels
logger.Trace("This is a Trace Message")
logger.Debug("This is a Debug Message")
logger.Info("This is an Info Message")
logger.Warn("This is a Warning Message")
logger.Error("This is an Error Message")
logger.Fatal("This is a Fatal Message")
' Pause the console for viewing output
Console.Read()
End Sub
End Class我们的程序已在控制台中记录了消息,如下所示。

现在,我们已经演示了在控制台中记录消息的示例。 现在我们将配置一个 NLog 目标,将消息记录到文件中。
文件中日志消息
我们需要为文件日志记录在配置文件中设置文件目标,而不是控制台目标。
<targets>
<!-- Log to a file at specified location -->
<target xsi:type="File" name="fileTarget" fileName="D:\Logs\mylog.txt" layout="${longdate} ${level:uppercase=true} ${message}" />
</targets>
<rules>
<!-- All messages with a minimum log level of Trace or higher are written to the file -->
<logger name="*" minlevel="Trace" writeTo="fileTarget" />
</rules>
现在,运行程序以将消息记录到文件中。

日志目标
NLog 支持多种日志输出目标,让您选择日志消息应存储的位置。 一些常见的目标包括:
- 文件:将消息记录到一个或多个文件。
- 控制台:在控制台中记录消息。
- 数据库:将消息记录到数据库(SQL Server, MySQL, Oracle, PostgreSQL 等)中。
- 电子邮件:将日志消息以电子邮件形式发送。
- 事件日志:将消息记录到 Windows 事件日志。
- 自定义目标:您可以创建自定义日志目标以满足特定需求。
您可以配置 NLog 同时使用一个或多个目标。
IronPDF 简介
进一步探索 IronPDF 是一个强大的 .NET 库,用于简化 C# 和 VB.NET 应用程序中的 PDF 处理。 它提供了创建、编辑和操作 PDF 文档以及将 HTML 内容转换为 PDF 格式的强大功能,使其成为包括 web 开发、报告和文档管理在内的广泛行业的开发人员的必备工具。
IronPDF 的突出功能是其 HTML 到 PDF 转换 功能,该功能保持您的布局和样式不变。 它从网页内容生成 PDF,使其非常适合报告、发票和文档。 HTML 文件、网址和 HTML 字符串可以轻松转换为 PDF。
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class让我们通过日志生成一个 PDF。
带日志的 PDF 生成
第一步是将 IronPDF 库安装到我们的项目中。 我们可以使用 Visual Studio 中的 NuGet 包管理器或通过 NuGet CLI 来实现。 打开您的项目并在包管理器控制台中输入以下命令。
此命令将安装 IronPDF 和项目中所需的所有依赖项。
编写以下代码以从带日志的 HTML 生成 PDF 文件。
using NLog;
using IronPdf;
internal class Program
{
// Create an instance of the Logger
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
logger.Info("Initializing Chrome PDF Renderer");
ChromePdfRenderer renderer = new ChromePdfRenderer();
logger.Info("Creating PDF From HTML String");
var pdf = renderer.RenderHtmlAsPdf("<h1>This is my Sample PDF<h1>");
logger.Info("Saving PDF File");
pdf.SaveAs(@"D:\myPDF.pdf");
}
}Imports NLog
Imports IronPdf
Friend Class Program
' Create an instance of the Logger
Private Shared logger As Logger = LogManager.GetCurrentClassLogger()
Shared Sub Main(ByVal args() As String)
logger.Info("Initializing Chrome PDF Renderer")
Dim renderer As New ChromePdfRenderer()
logger.Info("Creating PDF From HTML String")
Dim pdf = renderer.RenderHtmlAsPdf("<h1>This is my Sample PDF<h1>")
logger.Info("Saving PDF File")
pdf.SaveAs("D:\myPDF.pdf")
End Sub
End Class上述代码片段将创建一个带有日志消息的 PDF 文件,如下所示。
日志和 PDF 文件

结论
总之,NLog 已成为 C# 应用程序中有效日志记录的重要工具,提供给开发人员一个用于捕获、分类和管理日志数据的强大框架。 它的灵活性和易用性使其成为各种领域的日志需求的首选。 此外,当与 IronPDF 等互补库结合使用时,可以在 .NET 应用程序中简化 PDF 的生成和操作,开发人员可以将管理功能扩展到涵盖基于 PDF 的日志和报告的创建。 值得一提的是,IronPDF 提供 IronPDF 的免费试用 以测试其功能。 如果它满足您的要求,您可以选择 IronPDF 的商业许可证,以提供对 IronPDF 功能的持续访问,具备附加的功能和支持,以便顺利地将其集成到您的项目中,特别是与 PDF 相关的功能。
通过组合使用 NLog 和 IronPDF 的力量,开发人员不仅可以获得有关应用程序行为的见解,还可以增强他们的报告和文档管理流程,确保他们的软件保持高效、可维护和记录良好的结构化日志。

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。
相关文章


