跳過到頁腳內容
.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">

  <targets>

    <target name="console" xsi:type="Console" layout="${longdate}|${message}"/>
  </targets>

  <rules>

    <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">

  <targets>

    <target name="console" xsi:type="Console" layout="${longdate}|${message}"/>
  </targets>

  <rules>

    <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 檔案的 rules 標籤中設定 minlevel="Trace",如下所示。

<rules>

  <logger name="*" minlevel="Trace" writeTo="console" />
</rules>
<rules>

  <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 中記錄的訊息如下所示。

nlog 日誌訊息

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

檔案中的記錄訊息

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

<targets>

  <target xsi:type="File" name="fileTarget" fileName="D:\Logs\mylog.txt" layout="${longdate} ${level:uppercase=true} ${message}" />
</targets>

<rules>

  <logger name="*" minlevel="Trace" writeTo="fileTarget" />
</rules>
<targets>

  <target xsi:type="File" name="fileTarget" fileName="D:\Logs\mylog.txt" layout="${longdate} ${level:uppercase=true} ${message}" />
</targets>

<rules>

  <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 適用於 .NET 可簡化 .NET 應用程式中 PDF 的產生與操作,若與 IronPDF 之類的輔助函式庫結合,開發人員便可擴展其管理功能,以包含基於 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 生成、編輯和轉換能力,然後再選擇商業許可證。

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

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

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

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我