0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【C#】ErrorLog 出力時に Exception の内容が消失していた話

0
Posted at

はじめに

とある秘密プロジェクト X で作成したバッチを実行してエラーログを出力した際、例外の内容が消失した事件が発生しました。例外の内容はどこにいったのか … その謎を解き明かしていきます。

対象のコード

catch (Exception ex)
{
  _logger.LogError("ここにメッセージが入っていたよ", ex);
}

結論

_logger.LogError の使い方が間違っていました。解き明かすプロセスを楽しみにしていた人はごめんなさい。単純だったので解き明かすプロセスの話が思い浮かばなかったのです。許してください。さて、正しい使い方はこうです。

catch (Exception ex)
{
  _logger.LogError("ここにメッセージが入っていたよ {ex}", ex);
}

引数に指定した ex を string 引数の方で指定してあげなくては出力されなかったのです。ex からしてみると休日上司に呼び出しをくらって会社に出社したときに「呼び出した理由?ん~、何だっけ、忘れちゃった。」と言われたようなものです。私だったら顔には出しませんが、内心発狂しています。ちなみに例外を先に持ってきて以下のように書いても例外は出力されます。

catch (Exception ex)
{
  _logger.LogError(ex ,"ここにメッセージが入っていたよ" );
}

というわけでログの出力時に渡す引数の順番や引数の内容に気をつけましょうという話でした。

参考

https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.extensions.logging.loggerextensions.logerror?view=dotnet-plat-ext-5.0#Microsoft_Extensions_Logging_LoggerExtensions_LogError_Microsoft_Extensions_Logging_ILogger_System_String_System_Object___

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?