.NET 幫助

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

發佈 2024年4月29日
分享:

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

理解 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#

該配置指定所有預設日誌應在「資訊」級別,但 Microsoft 的庫應僅記錄警告及以上級別的日誌。 它還將日誌輸出定向到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 將 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
        {
            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.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >