.NET 幫助

C# 日誌記錄(開發人員的工作原理)

發佈 2024年4月29日
分享:

日誌記錄 是軟體開發中至關重要的一部分,特別是在 C# 這類語言中。它幫助開發者追蹤程式執行過程中發生的事件,使他們更容易理解程式的行為並診斷問題。本指南將涵蓋 C# 日誌記錄的各個方面以及 IronPDF,從基本概念到高級日誌配置和工具。它提供了對應用程式中日誌配置的全面理解和控制。

了解C#中的日誌記錄

在其核心,C# 中的日誌記錄涉及記錄軟件運行時的信息。這些記錄,或者稱為日誌消息,被存儲在日誌文件或其他介質中,並且可以包含錯誤消息、關於軟件狀態的信息或調試消息等數據。日誌記錄的目的是提供一種捕獲應用程序運行信息的持久化格式。這些信息對於調試問題、監控軟件性能以及確保應用程序按預期運行是無價的。這包括配置文件、日誌記錄API、日誌配置、結構化日誌和日誌異常。

寫日誌訊息

要在 C# 中開始日誌記錄,開發者需要在他們的應用程式中寫入日誌訊息。這是通過使用日誌記錄框架或 API 來完成的。在 C# 中,一個受歡迎的選擇是微軟的 ILogger 介面,該介面位於 Microsoft.Extensions.Logging 命名空間中。此介面提供了一種簡單的方法來記錄不同重要性級別的數據,這些級別通常稱為日誌等級。這些等級包括 Information、Debug 和 Error,有助於根據訊息的嚴重程度來分類和篩選日誌輸出。

using Microsoft.Extensions.Logging;
public class Program
{
    static void Main(string [] args)
    {
        ILogger logger = LoggerFactory.Create(builder => 
        {
            builder.AddConsole();
        }).CreateLogger<Program>();
        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)
    {
        ILogger logger = LoggerFactory.Create(builder => 
        {
            builder.AddConsole();
        }).CreateLogger<Program>();
        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)
		Dim logger As ILogger = LoggerFactory.Create(Sub(builder)
			builder.AddConsole()
		End Sub).CreateLogger<Program>()
		logger.LogInformation("This is an information log message")
		logger.LogError("This is an error log message")
	End Sub
End Class
VB   C#

在上述範例中,名為loggerILogger對象被配置為將日誌訊息輸出到主控台。這個設置很簡單,但對於幫助您理解日誌訊息的生成和顯示方式非常基本。

C# 記錄(開發人員如何使用):圖1 - 示例控制台輸出和記錄訊息

日誌檔案和提供者

在實際應用中,您經常需要將日誌消息儲存在檔案或其他儲存系統中以供日後檢視。這就是日誌提供者發揮作用的地方。提供者是日誌框架的組件,負責將日誌數據輸出到各種目標,例如檔案、數據庫或外部服務。

例如,要配置一個日誌記錄器以將消息寫入到檔案中,您可以使用基於檔案的提供者,如 FileLoggerProvider。這需要修改應用程序的配置文件。 (通常在 .NET 應用程式中的 appsettings.json) 指定詳細資訊,例如日誌文件路徑和最低日誌級別。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning"
    },
    "File": {
      "Path": "logs/myapp.log"
    }
  }
}
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning"
    },
    "File": {
      "Path": "logs/myapp.log"
    }
  }
}
"Logging":
  If True Then
	"LogLevel":
	If True Then
	  "Default": "Information", "Microsoft": "Warning"
	End If
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'   , "File":
'	{
'	  "Path": "logs/myapp.log"
'	}
  End If
VB   C#

配置指定所有預設日誌應該在「信息」級別,但微軟的庫應該僅記錄警告及以上級別的日誌。它還將日誌輸出定向到logs目錄中的名為myapp.log的日誌檔案。

高級日誌記錄技術

除了基本的日誌消息外,C# 還支持結構化日誌記錄,這使得在日誌中包括結構化數據而不僅僅是純文本變得可能。結構化日誌記錄使搜索和分析日誌數據變得更容易,因為每個上下文信息都作為單獨的字段存儲。

logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow);
logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow);
logger.LogDebug("Processing order {OrderId} at {Timestamp}", orderId, DateTime.UtcNow)
VB   C#

在這個結構化日志範例中,OrderIdTimestamp 是信息模板中的佔位符,將分別用 orderIdDateTime.UtcNow 的值來填充。這比傳統日志記錄更具威力,因為它允許根據每個日志條目中的特定欄位更輕鬆地查詢和操作日志數據。

與外部系統整合

C# 日誌記錄可以擴展以整合到像 SQL Server 或 Windows 事件日誌這樣的外部系統,增強日誌數據的管理和分析方式。通過使用專門的日誌記錄提供程序,可以將日誌消息定向到這些系統,提供更強大的錯誤監控和回應能力。

builder.AddEventLog(new EventLogSettings
{
    SourceName = "MyApplication"
});
builder.AddEventLog(new EventLogSettings
{
    SourceName = "MyApplication"
});
builder.AddEventLog(New EventLogSettings With {.SourceName = "MyApplication"})
VB   C#

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

將 IronPDF 與 C# 記錄功能整合

C# 日誌記錄(適用於開發者的操作方式):圖 2 - IronPDF 首頁

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

將 IronPDF 與 C# 日誌結合使用可以在處理 PDF 文件時增強錯誤處理和調試。通過集成日誌記錄,您可以跟蹤 PDF 生成過程並捕捉任何出現的問題或異常。在 PDF 生成功能對應用程序的功能至關重要的情況下,例如基於用戶數據的動態報告生成,此集成特別有用。

代碼範例

要在C#日誌記錄的同時使用IronPDF,您需要在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
        {
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs(outputPath);
            _logger.LogInformation("PDF created successfully at {OutputPath}", outputPath);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error creating PDF from HTML");
        }
    }
}
// Usage
public class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddConsole(); // Works after adding the right package and using directive
        });
        ILogger<PdfGenerator> logger = loggerFactory.CreateLogger<PdfGenerator>(); // Correct type parameter
        PdfGenerator pdfGenerator = new PdfGenerator(logger);
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputPath = "output.pdf";
        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
        {
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            pdf.SaveAs(outputPath);
            _logger.LogInformation("PDF created successfully at {OutputPath}", outputPath);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error creating PDF from HTML");
        }
    }
}
// Usage
public class Program
{
    static void Main(string [] args)
    {
        License.LicenseKey = "License-Key";
        ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddConsole(); // Works after adding the right package and using directive
        });
        ILogger<PdfGenerator> logger = loggerFactory.CreateLogger<PdfGenerator>(); // Correct type parameter
        PdfGenerator pdfGenerator = new PdfGenerator(logger);
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputPath = "output.pdf";
        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
			Dim renderer = New ChromePdfRenderer()
			Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
			pdf.SaveAs(outputPath)
			_logger.LogInformation("PDF created successfully at {OutputPath}", outputPath)
		Catch ex As Exception
			_logger.LogError(ex, "Error creating PDF from HTML")
		End Try
	End Sub
End Class
' Usage
Public Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		Dim loggerFactory As ILoggerFactory = LoggerFactory.Create(Sub(builder)
			builder.AddConsole() ' Works after adding the right package and using directive
		End Sub)
		Dim logger As ILogger(Of PdfGenerator) = loggerFactory.CreateLogger(Of PdfGenerator)() ' Correct type parameter
		Dim pdfGenerator As New PdfGenerator(logger)
		Dim htmlContent As String = "<h1>Hello, PDF!</h1><p>This is a simple PDF generated from HTML.</p>"
		Dim outputPath As String = "output.pdf"
		pdfGenerator.CreatePdfFromHtml(htmlContent, outputPath)
	End Sub
End Class
VB   C#

C# 日誌記錄(開發人員如何運行):圖3 - 與 IronPDF 集成後展示信息級日誌消息的控制臺輸出

此設置不僅促進了從 HTML 生成 PDF,還通過日誌確保操作的詳細記錄,有助於維護和故障排除。將記錄集成到 IronPDF 中可以顯著提高應用程式處理 PDF 功能的可靠性和可追溯性。

結論

C# 日誌記錄(開發人員的工作原理):圖 4 - IronPDF 授權頁面

在 C# 中進行日誌記錄是一種靈活而強大的方式,可以捕捉有關應用程序操作的詳細信息。通過使用不同的日誌級別、配置各種提供者和實現結構化日誌記錄,開發人員可以創建一個全面的日誌系統,以提高其應用程序的可維護性和可調試性。

IronPDF 提供了一个 免費試用 起價 $749。

< 上一頁
C# Devart.Data.Oracle(開發人員如何使用)
下一個 >
C# 將 double 四捨五入為 int(開發人員如何操作)

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >