Подтвердить что ты не робот

Как регистрировать исключение в файле?

Я хочу иметь возможность вести журнал в каждом блоке catch. Что-то вроде этого.

catch (Exception exception)
{
  Logger.Write(exception);
}

а затем настройки в конфигурации будут отображать свойство Message и StackTrace и т.д., используя клиентский прослушиватель.

Я хотел бы использовать Application Application Log Block. Я уверен, что кто-то, должно быть, уже это сделал.

4b9b3361

Ответ 1

Другие опубликовали несколько хороших ссылок на то, как работает Блок приложений регистрации (LAB), поэтому я не буду дублировать это здесь.

С точки зрения форматирования вашего исключения у вас есть 3 варианта, о которых я могу думать:

  • Используйте стандартную Exception.ToString() (это неплохо)
  • Напишите пользовательский Formatter, который интегрируется в 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 + "  ");
        }
    }

Ответ 2

Microsoft предоставила здесь обширные рекомендации: Разработка приложений с использованием блока приложений ведения журнала

Хорошо стоит ознакомиться с тем, что они должны сказать, насколько это достаточно эффективно.

Если вы хотите что-то еще немного на земле, в этой статье в блоге приводятся некоторые рабочие примеры: Как настроить и использовать блок приложений ведения журнала

Если у вас по-прежнему возникают проблемы после их чтения, отредактируйте свой пост с более подробной информацией о том, что кажется проблемой.

Ответ 3

@iSid Это то, о чем вы просите

public static void printException(Exception ex){
                Console.WriteLine("HelpLink = {0}", ex.HelpLink);
                Console.WriteLine("Message = {0}", ex.Message);
                Console.WriteLine("Source = {0}", ex.Source);
                Console.WriteLine("StackTrace = {0}", ex.StackTrace);
                Console.WriteLine("TargetSite = {0}", ex.TargetSite);

            }

Ответ 4

Вам нужно добавить соответствующий прослушиватель для текстовых файлов - см. этот пост, для ASP.NET, но файлы конфигурации работают одинаково для всех приложений.