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();
}
サンプルコードリポジトリ
関連講座リンク
本作品は CC BY-NC-SA 4.0 ライセンスで提供されています。再配布・改変は許可されていますが、著者表記(鄭子銘)を保持し、商業利用は禁止されます。