これまでの章ではユーザーが定義した内容をログに記録する方法を紹介しました。実はLog4netは例外情報やスタックトレースも出力可能で、開発者のトラブルシューティングに役立ちます。
try
{
int b = 0;
int a = 100 / b;
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
}Code language: PHP (php)
- 例外の発生:
100 / b。変数b=0のためDivideByZeroException(0除算例外)がスローされます。 - 例外の補足:
catch (Exception ex)はExceptionを継承する全ての例外をキャッチします。 - ログ出力の重要な書き方:
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)
例外情報を記録する
Previous: 独立設定ファイル