跳至頁尾內容
.NET幫助

C# Logging(對於開發者的運行原理)

Logging 是軟體開發中至關重要的一部分,特別是在像 C# 這樣的語言中。 它幫助開發者跟蹤在程式執行期間發生的事件,使得理解其行為和診斷問題變得更容易。 本指南將涵蓋 C# 日誌記錄和 IronPDF 的進階 PDF 操作功能 的所有方面,從基本概念到進階日誌配置和工具。 它提供對應用程式中的日誌配置的全面理解和控制。

Understanding Logging in C

從根本上說,C# 中的日誌記錄是記錄軟體運行時的資訊。 這些記錄或日誌消息儲存在日誌檔案或其他媒介中,可以包括錯誤消息、關於軟體狀態的資訊或除錯消息。 記錄的目的是提供一種以持久格式捕獲應用程式操作資訊的方法。 這種資訊對於除錯問題、監控軟體性能以及確保應用程式按預期行為至關重要。 這包括配置文件、日誌記錄 API、日誌配置、結構化日誌和日誌例外。

寫入日誌消息

要在 C# 中開始日誌記錄,開發者需要在他們的應用程式中撰寫日誌消息。 這是通過使用日誌框架或 API 來完成的。 在 C# 中,一個流行的選擇是 Microsoft.Extensions.Logging 命名空間中的 ILogger 介面。 這個介面提供了一種簡單的方法來在各種重要程度上日誌資料,這些稱為日誌級別。 這些級別,包括 Information、Debug 和 Error,有助於根據記錄消息的嚴重性來分類和篩選日誌輸出。

using Microsoft.Extensions.Logging;

public class Program
{
    static void Main(string[] args)
    {
        // Create a logger instance with console output
        ILogger logger = LoggerFactory.Create(builder => 
        {
            builder.AddConsole(); // Add console as a logging target
        }).CreateLogger<Program>();

        // Log messages with different levels of severity
        logger.LogInformation("This is an information log message");
        logger.LogError("This is an error log message");
    }
}
using Microsoft.Extensions.Logging;

public class Program
{
    static void Main(string[] args)
    {
        // Create a logger instance with console output
        ILogger logger = LoggerFactory.Create(builder => 
        {
            builder.AddConsole(); // Add console as a logging target
        }).CreateLogger<Program>();

        // Log messages with different levels of severity
        logger.LogInformation("This is an information log message");
        logger.LogError("This is an error log message");
    }
}
Imports Microsoft.Extensions.Logging

Public Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a logger instance with console output
		Dim logger As ILogger = LoggerFactory.Create(Sub(builder)
			builder.AddConsole() ' Add console as a logging target
		End Sub).CreateLogger<Program>()

		' Log messages with different levels of severity
		logger.LogInformation("This is an information log message")
		logger.LogError("This is an error log message")
	End Sub
End Class
$vbLabelText   $csharpLabel

在上述例子中,名為 loggerILogger 物件被配置為將日誌消息輸出到控制台。 這個設置很簡單但對理解如何生成和顯示日誌消息至關重要。

C# 日誌記錄(開發者如何工作):圖 1 - 控制台輸出日誌資訊範例

日誌檔案和提供者

在實際的應用程式中,您通常需要將日誌消息儲存在文件或其他儲存系統中以供日後查看。 這就是日誌提供者的作用。 提供者是日誌框架的組成部分,負責將日誌資料輸出到各種目的地,如文件、資料庫或外部服務。

例如,配置一個日誌器將消息寫入文件,您可能會使用像 FileLoggerProvider 這樣的基於文件的提供者。 這需要修改應用程式的配置文件(通常是在 .NET 應用程式中的 appsettings.json)來指定詳情如日誌文件路徑和最小日誌級別。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information", // Log levels for the application
      "Microsoft": "Warning"   // Log levels for Microsoft libraries
    },
    "File": {
      "Path": "logs/myapp.log" // File path for the log file
    }
  }
}

配置指定所有預設日誌應在"Information"級別,但 Microsoft 的程式庫應只記錄警告及以上級別。 它還將日誌輸出指導到名為 myapp.log 的日誌文件,位於 logs 目錄中。

進階日誌技術

除了基本的日誌消息,C# 支援結構化日誌,這允許在日誌中包含結構化資料而不只是純文字。 結構化日誌使得搜索和分析日誌資料更容易,因為每條上下文資訊都被當作單獨的字段保存。

// Log message with structured data
logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow);
// Log message with structured data
logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow);
' Log message with structured data
logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow)
$vbLabelText   $csharpLabel

在這個結構化日誌範例中,OrderIdTimestamp 是消息模板中的佔位符,將被用 orderIdDateTime.UtcNow 的值填充。 這比傳統的日誌記錄更強大,因為它允許更輕鬆地根據每條日誌記錄中的具體字段進行查詢和操控。

與外部系統整合

C# 的日誌記錄可以擴展為與外部系統如 SQL Server 或 Windows 事件日誌整合,增強日誌資料的管理和分析方式。 通過使用專用的日誌提供者,日誌消息可以被引導至這些系統,提供更強大的錯誤監測和響應能力。

// Direct log output to the Windows Event Log under a specific source name
builder.AddEventLog(new EventLogSettings
{
    SourceName = "MyApplication"
});
// Direct log output to the Windows Event Log under a specific source name
builder.AddEventLog(new EventLogSettings
{
    SourceName = "MyApplication"
});
' Direct log output to the Windows Event Log under a specific source name
builder.AddEventLog(New EventLogSettings With {.SourceName = "MyApplication"})
$vbLabelText   $csharpLabel

這個配置片段將日誌輸出引導至源名稱為 "MyApplication" 的 Windows 事件日誌下。 這對於在 Windows 伺服器上運行的應用程式特別有用,其中事件日誌是監控軟體和系統消息的集中工具。

將 IronPDF 與 C# 日誌記錄整合

C# 日誌記錄(開發者如何工作):圖 2 - IronPDF 主頁

了解更多關於 IronPDF 的 HTML 到 PDF 的轉換 是一個 .NET PDF 程式庫,可讓開發者建立、操作和渲染 PDF。 它將 HTML 轉換為 PDF,這是從網頁內容生成報告、發票和其他文件型別的常見需求。 IronPDF 提供了一套全面的功能,可滿足各種 PDF 相關任務,包括編輯文字和圖像、保護文件,甚至提取內容。

將 IronPDF 與 C# 日誌記錄結合可以增強處理 PDF 文件時的錯誤處理和除錯。 通過整合日誌,您可以跟蹤 PDF 生成過程並捕捉任何問題或異常。這種整合在 PDF 生成是應用程式功能的關鍵部分的場景中尤為有用,如基於使用者資料的動態報告生成。

程式程式碼範例

要使用 IronPDF 與 C# 日誌記錄,您需要在 PDF 操作中加上日誌記錄調用。 這裡是一個範例,展示如何在 .NET 應用程式中整合這兩種技術。 此範例假設您正在使用 Microsoft.Extensions.Logging 中的 ILogger 介面。

using IronPdf;
using Microsoft.Extensions.Logging;
using System;

public class PdfGenerator
{
    private readonly ILogger _logger;

    public PdfGenerator(ILogger<PdfGenerator> logger)
    {
        _logger = logger;
    }

    public void CreatePdfFromHtml(string htmlContent, string outputPath)
    {
        try
        {
            // Initialize PDF renderer
            var renderer = new ChromePdfRenderer();

            // Convert HTML content to PDF
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);

            // Save the generated PDF to a file
            pdf.SaveAs(outputPath);

            // Log the success of PDF creation
            _logger.LogInformation("PDF created successfully at {OutputPath}", outputPath);
        }
        catch (Exception ex)
        {
            // Log any errors encountered during PDF creation
            _logger.LogError(ex, "Error creating PDF from HTML");
        }
    }
}

// Usage example
public class Program
{
    static void Main(string[] args)
    {
        // Set the license key for IronPDF, if applicable
        License.LicenseKey = "License-Key";

        // Create a logger factory to manage logging configurations
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddConsole(); // Enable logging to the console
        });

        // Create a logger for the PdfGenerator class
        ILogger<PdfGenerator> logger = loggerFactory.CreateLogger<PdfGenerator>();

        // Instantiate the PDF generator
        PdfGenerator pdfGenerator = new PdfGenerator(logger);

        // Example HTML content and output path
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputPath = "output.pdf";

        // Create a PDF from the provided HTML content
        pdfGenerator.CreatePdfFromHtml(htmlContent, outputPath);
    }
}
using IronPdf;
using Microsoft.Extensions.Logging;
using System;

public class PdfGenerator
{
    private readonly ILogger _logger;

    public PdfGenerator(ILogger<PdfGenerator> logger)
    {
        _logger = logger;
    }

    public void CreatePdfFromHtml(string htmlContent, string outputPath)
    {
        try
        {
            // Initialize PDF renderer
            var renderer = new ChromePdfRenderer();

            // Convert HTML content to PDF
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);

            // Save the generated PDF to a file
            pdf.SaveAs(outputPath);

            // Log the success of PDF creation
            _logger.LogInformation("PDF created successfully at {OutputPath}", outputPath);
        }
        catch (Exception ex)
        {
            // Log any errors encountered during PDF creation
            _logger.LogError(ex, "Error creating PDF from HTML");
        }
    }
}

// Usage example
public class Program
{
    static void Main(string[] args)
    {
        // Set the license key for IronPDF, if applicable
        License.LicenseKey = "License-Key";

        // Create a logger factory to manage logging configurations
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddConsole(); // Enable logging to the console
        });

        // Create a logger for the PdfGenerator class
        ILogger<PdfGenerator> logger = loggerFactory.CreateLogger<PdfGenerator>();

        // Instantiate the PDF generator
        PdfGenerator pdfGenerator = new PdfGenerator(logger);

        // Example HTML content and output path
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputPath = "output.pdf";

        // Create a PDF from the provided HTML content
        pdfGenerator.CreatePdfFromHtml(htmlContent, outputPath);
    }
}
Imports IronPdf
Imports Microsoft.Extensions.Logging
Imports System

Public Class PdfGenerator
	Private ReadOnly _logger As ILogger

	Public Sub New(ByVal logger As ILogger(Of PdfGenerator))
		_logger = logger
	End Sub

	Public Sub CreatePdfFromHtml(ByVal htmlContent As String, ByVal outputPath As String)
		Try
			' Initialize PDF renderer
			Dim renderer = New ChromePdfRenderer()

			' Convert HTML content to PDF
			Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

			' Save the generated PDF to a file
			pdf.SaveAs(outputPath)

			' Log the success of PDF creation
			_logger.LogInformation("PDF created successfully at {OutputPath}", outputPath)
		Catch ex As Exception
			' Log any errors encountered during PDF creation
			_logger.LogError(ex, "Error creating PDF from HTML")
		End Try
	End Sub
End Class

' Usage example
Public Class Program
	Shared Sub Main(ByVal args() As String)
		' Set the license key for IronPDF, if applicable
		License.LicenseKey = "License-Key"

		' Create a logger factory to manage logging configurations
		Dim loggerFactory As ILoggerFactory = LoggerFactory.Create(Sub(builder)
			builder.AddConsole() ' Enable logging to the console
		End Sub)

		' Create a logger for the PdfGenerator class
		Dim logger As ILogger(Of PdfGenerator) = loggerFactory.CreateLogger(Of PdfGenerator)()

		' Instantiate the PDF generator
		Dim pdfGenerator As New PdfGenerator(logger)

		' Example HTML content and output path
		Dim htmlContent As String = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>"
		Dim outputPath As String = "output.pdf"

		' Create a PDF from the provided HTML content
		pdfGenerator.CreatePdfFromHtml(htmlContent, outputPath)
	End Sub
End Class
$vbLabelText   $csharpLabel

C# 日誌記錄(開發者如何工作):圖 3 - 整合 IronPDF 後控制台輸出顯示資訊級別日誌消息

這個設置不僅促進了 HTML 到 PDF 的生成,還確保操作通過日誌得到良好記錄,有助於維護和故障排除。 將日誌記錄與 IronPDF 整合可以顯著提高您的應用程式 PDF 處理能力的可靠性和可追溯性。

結論

C# 日誌記錄(開發者如何工作):圖 4 - IronPDF 授權頁面

C# 中的日誌記錄是一種靈活且強大的方式來捕獲有關應用程式操作的詳細資訊。 通過使用不同的日誌級別、配置各種提供者和實施結構化日誌,開發者可以建立一個全面的日誌系統,從而提高應用程式的可維護性和可除錯性。

嘗試使用免費試用的 IronPDF 起價 $999。

常見問題

什麼是C#中的日誌記錄?

C#中的日誌記錄涉及在執行過程中記錄有關軟體運行的資訊。日誌消息儲存在日誌文件或其他媒介中,包括錯誤消息和除錯消息等資料,有助於理解應用程式行為和診斷問題。

為什麼日誌對開發人員很重要?

日誌至關重要,因為它提供了一種持續的方式來捕獲有關應用程式運行的資訊。這些資訊對於除錯問題、監控軟體性能和確保應用程式按預期運行來說是無價的。

如何在C#中將日誌消息寫入文件?

要在C#中將日誌消息寫入文件,您可以使用基於文件的提供程式,如FileLoggerProvider。這需要修改應用程式的配置文件,例如appsettings.json,以指定日誌文件詳細資訊和最低日誌級別。

什麼是C#中的結構化日誌記錄?

C#中的結構化日誌記錄允許在日誌中包含結構化資料,而不是純文字。這使得日誌資料的搜索和分析更加容易,因為每一段上下文資訊都作為單獨的字段儲存,從而更易於查詢和操作。

C#日誌如何與外部系統整合?

C#日誌可以使用專門的日誌提供程式與外部系統(如SQL Server或Windows事件日誌)整合。這樣允許將日誌消息定向到這些系統,提高錯誤監控和響應能力。

PDF程式庫在C#應用程式中如何使用?

C#應用程式中可以使用PDF程式庫來建立、操作和呈現PDF。它可以與C#日誌整合,以增強PDF操作過程中的錯誤處理和除錯,如跟踪PDF生成過程和捕獲問題或異常。

如何將PDF程式庫與C#日誌整合?

要將PDF程式庫與C#日誌整合,您需要將日誌調用引入您的PDF操作中。通過使用ILogger接口,可以記錄PDF建立過程的成功或失敗,有助於維護和故障排除。

什麼是C#日誌記錄中的日誌級別?

C#日誌記錄中的日誌級別是用於指示日誌消息重要性或嚴重性的類別。常見的日誌級別包括資訊、除錯和錯誤,這些級別有助於根據日誌的上下文來過濾和管理日誌資料。

C#日誌記錄可以用於監控軟體性能嗎?

是的,C#日誌記錄可以通過捕獲應用程式運行的詳細資訊來監控軟體性能。這些資料有助於識別性能問題並確保應用程式的最佳性能。

如何在C#中配置多個日誌提供程式?

您可以通過設置ILoggerFactory以包含多個提供程式,例如控制台、文件和第三方服務來配置多個日誌提供程式。此配置允許將日誌消息定向到多個目的地,以便全面的監控。

C#日誌的高級技術有哪些?

C#日誌的高級技術包括結構化日誌記錄,這增強了日誌資料分析,還有使用第三方提供程式將日誌定向到外部系統,例如雲服務。這些技術改進了日誌管理和資料洞察力。

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

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

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