導入
Console.WriteLineでのデバッグは手軽ですが、本番運用では「いつ・どの深刻度で・何が起きたか」を記録するログが不可欠です。障害調査の生命線になります。まずログの核心であるログレベルを理解しましょう。
図解
flowchart TB
T["Trace/Debug<br/>詳細な開発用情報"] --> I["Information<br/>通常の動作記録"]
I --> W["Warning<br/>異常ではないが注意"]
W --> E["Error<br/>処理が失敗"]
E --> C["Critical<br/>システム停止級"]
style W fill:#fff3e0
style E fill:#ffebee
style C fill:#ffcdd2
サンプル
// 実務では Microsoft.Extensions.Logging の ILogger を使う(読み物):
// logger.LogInformation("注文 {OrderId} を受け付けました", orderId);
// logger.LogError(ex, "決済に失敗しました");
// ログレベルで「本番はWarning以上だけ出す」といったフィルタができるのが要点。
// ここでは考え方を最小の自作ロガーで体感する
var log = new SimpleLogger(minLevel: LogLevel.Warning); // Warning以上だけ出力
log.Log(LogLevel.Information, "ユーザーがログイン"); // 出ない(閾値未満)
log.Log(LogLevel.Warning, "在庫が残りわずか"); // 出る
log.Log(LogLevel.Error, "決済APIが応答しない"); // 出る
// [Warning] 在庫が残りわずか
// [Error] 決済APIが応答しない
enum LogLevel { Trace, Debug, Information, Warning, Error, Critical }
class SimpleLogger
{
private readonly LogLevel _minLevel;
public SimpleLogger(LogLevel minLevel) => _minLevel = minLevel;
public void Log(LogLevel level, string message)
{
if (level >= _minLevel) // 閾値以上のログだけ出力する
Console.WriteLine($"[{level}] {message}");
}
}
- ログにはレベル(深刻度)がある:Trace < Debug < Information < Warning < Error < Critical
- 閾値を設定し「本番はWarning以上だけ」のようにフィルタできるのがログの要点
- 実務では
Console.WriteLineではなくILogger(Microsoft.Extensions.Logging)を使う - メッセージに文脈(注文ID等)を含め、後から検索・追跡できるようにする
演習
var log = new SimpleLogger(LogLevel.Error); // Error以上だけ
log.Log(LogLevel.Warning, "軽微な警告"); // 出ない
log.Log(LogLevel.Critical, "サーバー停止"); // 出る
enum LogLevel { Trace, Debug, Information, Warning, Error, Critical }
// TODO: 閾値(minLevel)以上のときだけ "[レベル] メッセージ" を出力する
// SimpleLogger を定義してください(期待出力は Critical の1行)
___
- 期待される出力:
[Critical] サーバー停止
ヒント1を見る
enumは数値順で比較できるのでlevel >= _minLevelで閾値判定できます
ヒント2を見る
class SimpleLogger { private readonly LogLevel _min; public SimpleLogger(LogLevel min) => _min = min; public void Log(LogLevel level, string msg) { if (level >= _min) Console.WriteLine($"[{level}] {msg}"); } }
まとめ
- ログはレベル(深刻度)を持ち、閾値でフィルタできる
- 本番はWarning以上だけ、といった制御が運用の鍵
- 実務では
ILoggerを使い、文脈を含めて記録する
次回: 実務の定番ログライブラリLog4netです。