例外情報を記録する

これまでの章ではユーザーが定義した内容をログに記録する方法を紹介しました。実はLog4netは例外情報やスタックトレースも出力可能で、開発者のトラブルシューティングに役立ちます。

try
{
    int b = 0;
    int a = 100 / b;
}
catch (Exception ex)
{
    log.Error(ex.Message, ex);
}Code language: PHP (php)
  1. 例外の発生100 / b。変数b=0のためDivideByZeroException(0除算例外)がスローされます。
  2. 例外の補足catch (Exception ex)Exceptionを継承する全ての例外をキャッチします。
  3. ログ出力の重要な書き方log.Error(ex.Message, ex);
    • 第一引数:独自のログメッセージ(ここでは例外の簡易メッセージex.Messageを渡しています)
    • 第二引数には例外オブジェクトexを必ず渡してください
    • log4netは第二引数がExceptionインスタンスであると判別すると、スタックトレース(StackTrace)を自動出力し、エラー箇所や呼び出し元の情報を記録します。
誤った記述(スタックトレースが出力されない)
//  文字列だけ渡すとスタック情報が失われます
log.Error(ex.ToString());
log.Error(ex.Message);Code language: JavaScript (javascript)

この書き方では例外のテキストだけ出力され、ログのフォーマットによっては呼び出しスタックが展開されず、デバッグが難しくなります。

推奨される標準的な書き方
//  推奨:業務上の状況を補足し、例外オブジェクトを渡す
log.Error("除算処理実行時にエラーが発生しました", ex);Code language: JavaScript (javascript)

例外情報を記録する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です