.NET ヘルプ

C# ロギング(開発者向けの仕組み)

公開済み 2024年4月29日
共有:

ログ記録ソフトウェア開発、特にC#のような言語において、は重要な部分です。 それは、プログラムの実行中に発生するイベントを追跡するのに役立ち、プログラムの動作を理解し、問題を診断するのを容易にします。 このガイドでは、C# ロギングのすべての側面をカバーしIronPDF for Advanced PDF Manipulationの特徴基本的な概念から高度なログ設定およびツールまで。 これは、アプリケーション内のロギング設定に関する包括的な理解と制御を提供します。

C&numのロギングを理解する;

本質的に、C#でのロギングは、ソフトウェアが実行される際の情報を記録することを意味します。 これらの記録、またはログメッセージは、ログファイルやその他の媒体に保存され、エラーメッセージ、ソフトウェアの状態に関する情報、またはデバッグメッセージなどのデータを含むことがあります。 ログの目的は、アプリケーションの動作に関する情報を永続的な形式で取得する方法を提供することです。 この情報は、デバッグ問題の解決、ソフトウェアパフォーマンスの監視、およびアプリケーションが期待通りに動作することを保証するために非常に貴重です。 これには、設定ファイル、ログAPI、ログ設定、構造化ログ、およびログ例外が含まれます。

ログメッセージの記述

C#でロギングを開始するには、開発者はアプリケーション内にログメッセージを書く必要があります。 これは、ロギングフレームワークまたはAPIを使用して行います。 C#では、人気のある選択肢の一つとして、Microsoft.Extensions.Logging名前空間で利用可能なMicrosoftのILoggerインターフェースがあります。 このインターフェースは、ログレベルとして知られる重要度の異なるレベルでデータを記録するための簡単な方法を提供します。 これらのレベル(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#

上記の例では、ILoggerオブジェクトであるloggerはログメッセージをコンソールに出力するように設定されています。 この設定はシンプルですが、ログメッセージが生成および表示される方法を理解するのに重要です。

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 はメッセージテンプレート内のプレースホルダであり、それぞれの値として orderId および DateTime.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#

この構成スニペットは、ソース名 "MyApplication" の下で Windows イベント ログにログ出力を指示します。 これは、イベントログがソフトウェアやシステムメッセージを監視するための中央ツールとなっているWindowsサーバー上で実行されるアプリケーションに特に役立ちます。

IronPDFとC&numの統合;

ログ記録

C# ロギング(開発者向けの動作方法):図2 - IronPDF ホームページ

HTMLをPDFに変換するIronPDFについてもっと知るは、開発者がPDFを作成、操作、およびレンダリングすることを可能にする.NET PDFライブラリです。 HTMLをPDFに変換します。これは、Webコンテンツからレポート、請求書、その他のドキュメントタイプを生成するための一般的な要件です。 IronPDFは、テキストや画像の編集、文書のセキュリティ保護、コンテンツの抽出など、さまざまなPDF関連タスクに対応する包括的な機能セットを提供します。

IronPDFをC#のロギングと組み合わせることで、PDFファイルを扱う際のエラーハンドリングとデバッグが強化されます。 ログを統合することで、PDF生成の過程を追跡し、発生する可能性のある問題や例外をキャプチャすることができます。この統合は、PDF生成がアプリケーションの機能の重要な部分となるシナリオ、例えばユーザーデータに基づく動的なレポート生成の場合に特に有用です。

コード例

IronPDFをC#のログ記録と一緒に使用するには、PDF操作内にログ記録の呼び出しを組み込む必要があります。 以下は、.NETアプリケーションでこれらの2つの技術を統合する方法の例です。 この例は、Microsoft.Extensions.LoggingILogger インターフェースを使用していることを前提としています。

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# 丸め 処理 (開発者向けガイド)