跳過到頁腳內容
.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 版本相同或舊於 .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();
    }
}
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 類的實例並使用它來記錄調試級別的消息。 讓我們探索 NLog 支持的追蹤級別。

記錄等級

NLog 支持幾個記錄級別,每個級別都有其意義:

  1. 跟蹤:最詳細的級別,通常用於診斷目的。
  2. 調試:用於可以在開發過程中非常有用的調試信息。
  3. 信息:關於應用程序操作的一般信息。
  4. 警告:表示可能的問題,但不會中斷應用程序。
  5. 錯誤:表示應調查的失敗,但不一定會導致應用程序崩潰。
  6. 致命:表示應立即解決的嚴重故障。

通過將日誌信息分為這些級別,您可以輕鬆根據其嚴重性對其進行過濾和優先排序。

如下面所示,在您的 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 to 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 等各種日誌級別。

設置 NLog 在 .NET 應用程式中的流程是什麼?

要在 .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 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。