JavaのException.printStackTrace()
に相当するC#メソッドがありますか、それともInnerExceptionsを処理しながら自分で何かを記述する必要がありますか?
これを試して:
Console.WriteLine(ex.ToString());
http://msdn.Microsoft.com/en-us/library/system.exception.tostring.aspx から:
ToStringのデフォルト実装は、現在の例外をスローしたクラスの名前、メッセージ、内部例外でToStringを呼び出した結果、およびEnvironment.StackTraceを呼び出した結果を取得します。これらのメンバーのいずれかがnullの場合、その値は返される文字列に含まれません。
上記のコードでは、System.Object
を取り、ToString
を直接呼び出すオーバーロードがあるため、ToString
の呼び出しは必要ありません。
追加したい:例外の外でスタックを印刷したい場合は、次を使用できます:
Console.WriteLine(System.Environment.StackTrace);
ドリューが言うように、例外を文字列に変換するだけでこれを行います。たとえば、このプログラム:
using System;
class Test
{
static void Main()
{
try
{
ThrowException();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
static void ThrowException()
{
try
{
ThrowException2();
}
catch (Exception e)
{
throw new Exception("Outer", e);
}
}
static void ThrowException2()
{
throw new Exception("Inner");
}
}
次の出力を生成します。
System.Exception: Outer ---> System.Exception: Inner
at Test.ThrowException2()
at Test.ThrowException()
--- End of inner exception stack trace ---
at Test.ThrowException()
at Test.Main()
http://msdn.Microsoft.com/en-us/library/system.exception.stacktrace.aspx
Console.WriteLine(myException.StackTrace);
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
JavaのLog4Jのように、例外を引数として受け取り、すべてを処理できるC#ロギングAPIはありませんか?
つまり、Log4NETを使用します。