Другие опубликовали несколько хороших ссылок о том, как работает Блок приложения ведения журнала (LAB), поэтому я не буду повторять это здесь.
С точки зрения форматирования вашего исключения, у меня есть 3 варианта:
- Используйте реализацию по умолчанию
Exception.ToString()
(это неплохо)
- Напишите пользовательский форматировщик, который интегрируется в LAB.
- Написать вспомогательную функцию, которая выполняет форматирование и передает строку в метод Write.
Если вариант 1 не удовлетворяет вашим потребностям, я бы рекомендовал перейти к варианту 3 (поскольку вариант 2 является избыточным).
Простой пример будет выглядеть примерно так:
catch (Exception exception)
{
Logger.Write(LogHelper.CreateExceptionString(exception));
}
...
public static string CreateExceptionString(Exception e)
{
StringBuilder sb = new StringBuilder();
CreateExceptionString(sb, e, String.Empty);
return sb.ToString();
}
private static void CreateExceptionString(StringBuilder sb, Exception e, string indent)
{
if (indent == null)
{
indent = String.Empty;
}
else if (indent.Length > 0)
{
sb.AppendFormat("{0}Inner ", indent);
}
sb.AppendFormat("Exception Found:\n{0}Type: {1}", indent, e.GetType().FullName);
sb.AppendFormat("\n{0}Message: {1}", indent, e.Message);
sb.AppendFormat("\n{0}Source: {1}", indent, e.Source);
sb.AppendFormat("\n{0}Stacktrace: {1}", indent, e.StackTrace);
if (e.InnerException != null)
{
sb.Append("\n");
CreateExceptionString(sb, e.InnerException, indent + " ");
}
}