Попробуйте это:
Console.WriteLine(ex.ToString());
От http://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx :
реализация по умолчанию ToString получает название класса, который выдал текущее исключение, сообщение, результат вызова ToString на внутреннем исключении и результата вызова Среды. StackTrace. Если какой-либо из этих участников является пустым, его значение не включено в возвращаемую строку.
Примечание, что в вышеупомянутом коде вызов к ToString
не требуется как, существует перегрузка, которая берет System.Object
и вызовы ToString
непосредственно.
Я хотел бы добавить: Если Вы хотите распечатать стек за пределами исключения, можно использовать:
Console.WriteLine(System.Environment.StackTrace);
Как Drew говорит, просто преобразовав исключение, строка делает это. Например, эта программа:
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
Консоль. WriteLine (myException. StackTrace);
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
Там никакой C# не Регистрирует API, который может взять Исключение в качестве аргумента и обработать все для Вас, как Log4J Java делает?
Т.е. использование Log4NET.
Также взгляд на Log4Net... это - порт Log4J к.NET.