.NET 云原生架构师训练营(モジュール二 基礎強化 ログ)--学習ノート

2.2.2 カーネルモジュール—ログ処理

  • ILogger の利用方法
  • ログ識別子の設定
  • ログ分類の設計
  • ログレベルの選択基準
  • LoggerProvider の仕組み
  • ログ記録のベストプラクティス

ASP.NET Core におけるログ機能の概要

公式ドキュメント: .NET Core / ASP.NET Core ロギング

ILogger の基本利用

コントローラーのメソッド内でログを出力する例:

private readonly ILogger<WeatherForecastController> _logger;

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

_logger.LogInformation("Get アクションが実行されました");

ログ識別子(EventId)の活用

特定の操作を追跡するために、イベントIDを付与:


_logger.LogInformation(new EventId(1001, "Action"), "Get アクションが実行されました");

ログの分類(Category Name)

クラス名や独自のカテゴリ名でログの出力先を分ける。


private readonly ILogger<WeatherForecastController> _logger;
private readonly ILogger _customLogger;

public WeatherForecastController(
    ILogger<WeatherForecastController> logger,
    ILoggerFactory loggerFactory)
{
    _logger = loggerFactory.CreateLogger<WeatherForecastController>();
    _customLogger = loggerFactory.CreateLogger("CustomCategory"); // カスタムカテゴリ
}

ログレベルの定義と用途

ログレベル メソッド 説明 推奨使用場面
Trace 0 LogTrace 詳細なトレース情報。メソッドの開始・終了など、細かい挙動を記録。主にライブラリやインフラ層で使用。 開発環境/特殊環境
Debug 1 LogDebug デバッグ目的の情報を記録。エラー発生しやすい箇所の状態を確認。 開発環境/テスト環境
Information 2 LogInformation 重要な業務フローのステップ。例:注文完了、決済成功など。本番環境で有効に。 本番環境
Warning 3 LogWarning 異常は発生したが、処理継続可能。警告事項として記録。 本番環境
Error 4 LogError 処理中断を引き起こすエラー。ビジネスロジックに影響。 本番環境
Critical 5 LogCritical システムクラッシュや重大障害を記録。緊急対応が必要。 本番環境
None 6 なし ログ出力を無効にする。 不要

LoggerProvider の仕組み

Microsoft.Extensions.Logging 内のインターフェース定義:


namespace Microsoft.Extensions.Logging
{
    public interface ILoggerProvider : IDisposable
    {
        ILogger CreateLogger(string categoryName);
    }
}

カスタムログプロバイダの構築

複数の出力先(コンソール、デバッグ、イベントソース、Windows イベントログなど)に対応するため、プロバイダを差し替え可能。

アプリケーション内に登録されたすべての LoggerProvider を確認する:


var providers = host.Services.GetServices<ILoggerProvider>();

foreach (var provider in providers)
{
    Console.WriteLine(provider.GetType().Name);
}

実行結果:

Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider
Microsoft.Extensions.Logging.Debug.DebugLoggerProvider
Microsoft.Extensions.Logging.EventSource.EventSourceLoggerProvider
Microsoft.Extensions.Logging.EventLog.EventLogLoggerProvider

プロバイダの追加・削除:


.ConfigureLogging((ctx, logger) =>
{
    // logger.AddProvider(new MyCustomLoggerProvider()); // 追加
    logger.ClearProviders(); // 既存プロバイダをクリア
})

ログ記録の実践ガイドライン

初期設定ではプロバイダのクリアをコメントアウトして、デフォルトの設定を維持:


//.ConfigureLogging((ctx, logger) =>
//{
//    //logger.AddProvider(...);
//    //logger.ClearProviders();
//})

appsettings.json にてログレベルを調整:


{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Trace",
      "Microsoft.Hosting.Lifetime": "Trace"
    }
  }
}

コントローラーにログ出力メソッドを追加:


public IActionResult CreateOrder(dynamic order)
{
    _logger.LogTrace("CreateOrder メソッドへ進入");

    _logger.LogDebug("注文作成処理開始: {0}", "注文情報");

    _logger.LogTrace("orderService.Create 実行開始");

    if (order.amount <= 0)
    {
        _logger.LogWarning("注文金額が無効です: {0}", order.amount);
    }

    _orderService.Create(order);

    _logger.LogTrace("orderService.Create 完了");

    _logger.LogTrace("CreateOrder 処理正常終了");

    _logger.LogInformation("注文作成処理が正常に完了しました");

    return Ok();
}

サンプルコードリポジトリ

GitHub: HelloApi プロジェクト

関連講座リンク

コースページ

本作品は CC BY-NC-SA 4.0 ライセンスで提供されています。再配布・改変は許可されていますが、著者表記(鄭子銘)を保持し、商業利用は禁止されます。

タグ: ASP.NET Core ILogger logging EventId LoggerProvider

8月15日 11:31 投稿