Макет исключений nlog для форматирования типа исключения, сообщения и трассировки стекаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Макет исключений nlog для форматирования типа исключения, сообщения и трассировки стека

Сообщение Anonymous »

Помогите мне, пожалуйста, отформатировать исключения, регистрируемые с помощью файлового регистратора.
Я хотел бы, чтобы исключения регистрировались с новым разделителем строк между внутренними исключениями (если таковые имеются), с типом исключения, окруженным какими-то специальными символами, например [ ArgumentException], чтобы он отличался от текста ошибки, а исключения должны быть предназначены для табуляции, чтобы облегчить чтение трассировок стека.

Я проверил последний Нлог 4.4.12, но проблема в том, что не так-то просто параметризовать макет по умолчанию, чтобы получить что-то вроде

Код: Выделить всё

2017-10-04 15:13:22.5823 NLogTest.Program starting
2017-10-04 15:13:22.5823 NLogTest.Program failed to start NLogTest
[ArgumentException] bad try
at NLogTest.Classes.UnitOfWork.tryException() in d:\projects\NLogTest\Program.cs:line 62
at NLogTest.Program.Main(String[] args) in d:\projects\NLogTest\Program.cs:line 19
[ArgumentException] outer exception
at NLogTest.Classes.UnitOfWork.outerException() in d:\projects\NLogTest\Program.cs:line 49
at NLogTest.Classes.UnitOfWork.tryException() in d:\projects\NLogTest\Program.cs:line 57
[KeyNotFoundException] innerException
at NLogTest.Classes.UnitOfWork.innerException() in d:\projects\NLogTest\Program.cs:line 38
at NLogTest.Classes.UnitOfWork.outerException() in d:\projects\NLogTest\Program.cs:line 45
2017-10-04 15:13:22.5823 NLogTest.Program the end
Это журнал файлов исключений, который я хотел бы получить.
Я пробовал использовать такой макет

Код: Выделить всё

layout="${longdate} ${logger} ${message}${onexception:${newline}${exception:format=tostring}}"
он ​​использует стандартный метод исключения tostring, но результат не тот. Мне это не нравится

Код: Выделить всё

2017-10-04 15:28:52.6881 NLogTest.Program failed to start NLogTest
System.ArgumentException: bad try ---> System.ArgumentException: outer exception ---> System.Collections.Generic.KeyNotFoundException: innerException
at NLogTest.Classes.UnitOfWork.innerException() in d:\projects\NLogTest\Program.cs:line 40
at NLogTest.Classes.UnitOfWork.outerException() in d:\projects\NLogTest\Program.cs:line 47
--- End of inner exception stack trace ---
at NLogTest.Classes.UnitOfWork.outerException() in d:\projects\NLogTest\Program.cs:line 51
at NLogTest.Classes.UnitOfWork.tryException() in d:\projects\NLogTest\Program.cs:line 59
--- End of inner exception stack trace ---
at NLogTest.Classes.UnitOfWork.tryException() in d:\projects\NLogTest\Program.cs:line 64
at NLogTest.Program.Main(String[] args) in d:\projects\NLogTest\Program.cs:line 20
Трассировка стека внутренних сообщений об исключении отделяется в журнале (поэтому его трудно прочитать позже) в случае, если исключение выдается повторно более двух раз
и перед именем типа исключения нет табуляции (пробела).

Лучший результат, который я получил, был с макетом ниже

Код: Выделить всё

layout="${longdate} ${logger} ${message}${onexception:${newline}${exception:maxInnerExceptionLevel=10:format=shortType,message,stacktrace:separator=*:innerExceptionSeparator=
	}}"
и это

Код: Выделить всё

2017-10-04 15:49:02.6188 NLogTest.Program failed to start NLogTest
ArgumentException*bad try*   at NLogTest.Classes.UnitOfWork.tryException() in d:\projects\NLogTest\Program.cs:line 64
at NLogTest.Program.Main(String[] args) in d:\projects\NLogTest\Program.cs:line 20
ArgumentException*outer exception*   at NLogTest.Classes.UnitOfWork.outerException() in d:\projects\NLogTest\Program.cs:line 51
at NLogTest.Classes.UnitOfWork.tryException() in d:\projects\NLogTest\Program.cs:line 59
KeyNotFoundException*innerException*   at NLogTest.Classes.UnitOfWork.innerException() in d:\projects\NLogTest\Program.cs:line 40
at NLogTest.Classes.UnitOfWork.outerException() in d:\projects\NLogTest\Program.cs:line 47
Однако это очень сложно читать. Первая строка трассировки стека находится на той же строке, что и сообщение об исключении. Внутреннее сообщение об ошибке предназначено, но внутренняя трассировка стека — нет.

Есть ли в макете что-нибудь, что я пропустил?
Должен ли я создать собственный механизм визуализации макета исключений?
Вот исходный код C#, который я использовал для создания исключения

Подробнее здесь: https://stackoverflow.com/questions/465 ... tack-trace
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Я хочу создать функцию форматирования текста и форматирования цвета, аналогичную параметрам форматирования Gmail.
    Гость » » в форуме CSS
    0 Ответы
    59 Просмотры
    Последнее сообщение Гость
  • Повторное создание исключений в Java без потери трассировки стека
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как мне генерировать исключения с помощью трассировки стека в C++23?
    Anonymous » » в форуме C++
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Как я могу обрабатывать Elastic.CommonSchema.NLog с помощью Elastic.NLog.Targets
    Anonymous » » в форуме C#
    0 Ответы
    80 Просмотры
    Последнее сообщение Anonymous
  • Как я могу обрабатывать Elastic.CommonSchema.NLog с помощью Elastic.NLog.Targets
    Anonymous » » в форуме C#
    0 Ответы
    96 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»