跳至页脚内容
.NET 帮助

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 包管理器按照以下步骤进行操作:

  1. 在“工具”菜单中选择“NuGet 包管理器”,然后选择“为解决方案管理 NuGet 包”。
  2. 或者,在解决方案资源管理器中右键单击您的项目,选择“管理 NuGet 包”,然后选择“浏览”。
  3. 在 NuGet 包管理器窗口中,单击“浏览”选项卡,然后在搜索框中输入“NLog”。
  4. 您应该在搜索结果中看到 NLog 包。 点击选择。
  5. 在 NuGet 包管理器窗口的右侧,有一个包含您的解决方案中的项目的列表。 选择要安装 NLog 的项目。
  6. 从版本下拉菜单中选择所需的 NLog 包版本。 如果需要,您可以选择最新的稳定版本或特定版本。
  7. 选择项目和版本后,单击“安装”按钮以开始安装过程。

NuGet 包管理器将下载并安装 NLog 和任何依赖项。 您将在输出窗口中看到进度。

NLog 现已成功安装在您的项目中,您可以在 C# 代码中开始使用它进行日志记录。

创建 NLog 配置文件

要创建 NLog 配置文件(通常命名为 nlog.config),您可以按照以下步骤进行。 此配置文件将指定 NLog 在应用程序中的行为方式,包括日志目标、布局渲染器和规则。

在您的项目中,右键单击项目或要创建配置文件的目标文件夹。

  1. 选择“添加”>“新建项目...”。
  2. 在“添加新项目”对话框中,搜索“XML 文件”或“XML”并选择。
  3. 将文件命名为 nlog.config 并单击“添加”按钮。

Nlog Csharp Guide 1 related to 创建 NLog 配置文件

  1. 使用文本编辑器或 XML 编辑器打开新创建的 nlog.config 文件。
  2. 在 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>
<?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>
XML

在您的 C# 代码中,确保从 nlog.config 文件加载 NLog 配置。您通常在应用程序的启动代码中执行此操作,例如在 ASP.NET Core Startup.cs(适用于与 .NET 5 相同或更旧的 .NET 版本)中,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();
    }
}
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(ByVal 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
$vbLabelText   $csharpLabel

上述程序的输出如下所示:

Nlog Csharp Guide 2 related to 配置文件

在此示例中,我们创建了一个 Logger 类的实例,并使用它记录 Debug Level 的消息。 让我们探索 NLog 支持的跟踪级别。

日志级别

NLog 支持多个日志级别,每个级别都有其自身的重要性:

  1. Trace:最详细的级别,通常用于诊断。
  2. Debug:用于调试信息,有助于开发。
  3. Info:有关应用程序操作的一般信息。
  4. Warn:指示不会影响应用程序的潜在问题。
  5. Error:指示应调查的失败,但不一定会导致应用程序崩溃。
  6. Fatal:表示应立即处理的严重失败。

通过将日志消息分类为这些级别,您可以根据严重性轻松过滤和优先排序它们。

在 nLog.Config 文件的规则标记中设置 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>
<rules>
  <!-- All messages with a minimum log level of Trace or higher are written to the Console -->
  <logger name="*" minlevel="Trace" writeTo="console" />
</rules>
XML

让我们编写代码来记录所有跟踪级别的消息。

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();
    }
}
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
$vbLabelText   $csharpLabel

我们的程序已在控制台中记录了消息,如下所示。

nlog 日志消息

现在,我们已经演示了在控制台中记录消息的示例。 现在我们将配置一个 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>
<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>
XML

现在,运行程序以将消息记录到文件中。

Nlog Csharp Guide 4 related to 文件中日志消息

日志目标

NLog 支持多种日志输出目标,让您选择日志消息应存储的位置。 一些常见的目标包括:

  1. 文件:将消息记录到一个或多个文件。
  2. 控制台:在控制台中记录消息。
  3. 数据库:将消息记录到数据库(SQL Server, MySQL, Oracle, PostgreSQL 等)中。
  4. 电子邮件:将日志消息以电子邮件形式发送。
  5. 事件日志:将消息记录到 Windows 事件日志。
  6. 自定义目标:您可以创建自定义日志目标以满足特定需求。

您可以配置 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");
    }
}
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
$vbLabelText   $csharpLabel

让我们通过日志生成一个 PDF。

带日志的 PDF 生成

第一步是将 IronPDF 库安装到我们的项目中。 我们可以使用 Visual Studio 中的 NuGet 包管理器或通过 NuGet CLI 来实现。 打开您的项目并在包管理器控制台中输入以下命令。

Install-Package IronPdf

此命令将安装 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");
    }
}
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
$vbLabelText   $csharpLabel

上述代码片段将创建一个带有日志消息的 PDF 文件,如下所示。

日志和 PDF 文件

Nlog Csharp Guide 5 related to 日志和 PDF 文件

结论

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

通过组合使用 NLog 和 IronPDF 的力量,开发人员不仅可以获得有关应用程序行为的见解,还可以增强他们的报告和文档管理流程,确保他们的软件保持高效、可维护和记录良好的结构化日志。

常见问题解答

NLog如何增强C#应用程序中的日志记录?

NLog为C#应用程序提供了一个强大且灵活的日志框架。它允许开发人员通过在配置文件中定义日志目标和规则来轻松实现日志记录,支持各种日志级别,如追踪(Trace)、调试(Debug)、信息(Info)、警告(Warn)、错误(Error)和致命(Fatal)。

在.NET应用程序中设置NLog的过程是什么?

要在.NET应用程序中设置NLog,您需要安装NLog NuGet包,并在nlog.config文件中配置日志目标和规则。此设置允许您指定日志应被引导到何处,例如文件、控制台、数据库或电子邮件。

如何使用NLog将消息记录到数据库?

要使用NLog将消息记录到数据库,您需要在nlog.config文件中设置数据库目标。您将指定连接字符串以及日志条目所需的表或存储过程详细信息。

NLog可以用来通过电子邮件发送日志消息吗?

是的,NLog可以通过配置nlog.config文件中的电子邮件目标来通过电子邮件发送日志消息。您需要提供SMTP服务器详细信息、收件人电子邮件地址和其他电子邮件设置。

在.NET中使用IronPDF进行PDF生成的好处是什么?

IronPDF是一个强大的.NET库,简化了PDF的生成、编辑和转换。它支持HTML到PDF的转换,允许开发人员从HTML字符串、文件或URL生成PDF,增强报告和文档管理流程。

如何在C#应用程序中集成PDF生成的日志记录?

您可以通过使用NLog记录应用程序事件和IronPDF生成PDF,将NLog与IronPDF集成在C#应用程序中。这种组合让您可以创建包含日志信息的详细PDF报告。

NLog配置问题的一些常见故障排除步骤是什么?

NLog配置问题的常见故障排除步骤包括验证nlog.config文件中的语法错误,确保日志目标的正确文件路径和权限,以及检查可能影响日志记录的应用程序中的异常。

如何在购买之前测试IronPDF的功能?

IronPDF提供一个免费试用版,让开发人员测试其功能。此试用期为在选择商业许可证之前评估IronPDF的PDF生成、编辑和转换能力提供了机会。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。