跳過到頁腳內容
.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。 我們將使用控制台應用程式來展示所有的使用案例。

安裝 NLog NuGet 套件

要開始使用 NLog,您需要在專案中安裝 NLog NuGet 套件。 您可以透過 Visual Studio 中的 NuGet Package Manager,依照下列步驟完成:

1.在 "Tools" 功能表中選擇 "NuGet Package Manager",然後選擇 "Manage NuGet Packages for Solution"。 2.或者,在解決方案總管中的專案上按一下滑鼠右鍵,選擇 "管理 NuGet 套件",然後選擇 "瀏覽"。 3.在 NuGet Package Manager 視窗中,按一下"瀏覽"標籤,然後在搜尋方塊中輸入 "NLog"。 4.您應該會在搜尋結果中看到 NLog 套件。 按一下以選取。 5.在 NuGet Package Manager 視窗的右側,有您的解決方案中的專案清單。 選擇您要安裝 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 組態檔案

4.在文字編輯器或 XML 編輯器中開啟新建立的 nlog.config 檔案。 5.在 NLog.XML 檔案中加入下列設定。以下是 NLog 配置的基本範例,可將訊息記錄至 Console 目標。 您可以自訂此組態檔案以符合您的需求:

設定檔

<?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 類的實例,並使用它在 Debug Level 記錄訊息。 讓我們探索 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

我們的程式在 Console 中記錄的訊息如下所示。

!a href="/static-assets/pdf/blog/nlog-csharp-guide/nlog-csharp-guide-3.webp">nlog 日誌訊息。

現在,我們示範了在 Console 中記錄訊息的範例。 現在我們將設定一個 NLog 目標,將訊息記錄在檔案中。

檔案中的記錄訊息

我們需要在檔案記錄的設定檔中設定檔案目標,而非 Console 目標。

<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 格式,使其成為各行各業開發人員的必備工具,包括網頁開發、報表和文件管理。

IronPDF 的突出功能是其HTML 至 PDF 轉換功能,可保留您的版面設計和樣式。 它能從網頁內容產生 PDF,因此非常適合報告、發票和文件。 HTML 檔案、URL 和 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 Package Manager 或透過 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 for .NET 可簡化 .NET 應用程式中 PDF 的產生與操作,若與 IronPDF 之類的輔助函式庫結合,開發人員便可擴展其管理功能,以包含基於 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.config 檔案中設定電子郵件目標,NLog 可以透過電子郵件傳送日誌訊息。您需要提供 SMTP 伺服器詳細資訊、收件人電子郵件地址以及其他電子郵件設定。

在 .NET 中使用 IronPDF 生成 PDF 有哪些優點?

IronPDF 是一個功能強大的 .NET 函式庫,可簡化 PDF 的產生、編輯和轉換。它支援 HTML 到 PDF 的轉換,讓開發人員可以從 HTML 字串、檔案或 URL 產生 PDF,強化報表和文件管理流程。

如何在 C# 應用程式中整合日誌與 PDF 生成?

您可以在 C# 應用程式中整合 NLog 與 IronPDF,方法是使用 NLog 來記錄應用程式事件,並使用 IronPDF 來產生 PDF。這種組合可讓您建立包含日誌資訊的詳細 PDF 報告。

NLog 組態問題的常見疑難排解步驟有哪些?

NLog 組態問題的常見疑難排解步驟包括驗證 nlog.config 檔案是否有語法錯誤、確保日誌目標的檔案路徑和權限正確,以及檢查應用程式中可能影響日誌記錄的異常。

購買前如何測試 IronPDF 的功能?

IronPDF 提供免費試用,讓開發人員可以測試其功能。在選擇商業授權之前,此試用期可讓您評估 IronPDF 在 PDF 生成、編輯和轉換方面的功能。

Jacob Mellor, Team Iron 首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽学士工程學位(BEng) (1998-2001)。他於 1999 年在倫敦開設了他的第一家軟件公司,並於 2005 年製作了他的首個 .NET 組件,專注於解決 Microsoft 生態系統內的複雜問題。

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。