C#の例外のInnerException、GetBaseException、ToStringの差

結論としてはエラーログ出力にはToStringを使うべき。
なぜならば、ToStringは再帰的に内部エラーのスタックトレース出力をしてくれるから。

Exception.InnerException プロパティ

https://docs.microsoft.com/ja-jp/dotnet/api/system.exception.innerexception?view=netframework-4.8#System_Exception_InnerException
現在の例外を発生させた内部例外オブジェクト。
具体的には、例外の new Exception(String, Exception) コンストラクターに渡されたExceptionを返す。
内部例外が存在しない場合はnull。

Exception.GetBaseException メソッド

https://docs.microsoft.com/ja-jp/dotnet/api/system.exception.getbaseexception?view=netframework-4.8#System_Exception_GetBaseException
例外のチェイン(内部例外のチェイン)で、スローされた最初の例外を取得する。
内部例外が存在しない場合は、自身を取得するのでnullになることは無い。

Exception.ToString メソッド

https://docs.microsoft.com/ja-jp/dotnet/api/system.exception.tostring?view=netframework-4.8#System_Exception_ToString
自身の例外メッセージ、自身のスタックトレース再帰的に内部例外でToStringを呼び出した結果を取得する。