Ведение журнала InnerException с использованием Log4Net
Как мне зарегистрировать внутреннее исключение в Log4NET?
Это мой текущий шаблон конверсии:
<conversionPattern value="%date [%appdomain] %-5level %logger [%property{NDC}] - %message%newline" />
4 ответа
Console и File Appenders автоматически распечатывают исключение. Исключение: сообщение, трассировка стека и все внутренние исключения (также с трассировкой стека) регистрируются в отдельных строках и не соответствуют шаблону преобразования.
Я даже не уверен, что вы можете настроить log4net, чтобы не печатать его.
Обновление: можно настроить приложение, чтобы оно не печатало трассировку стека: Log4Net - Выход из трассировки стека исключений только для определенных файлов
% исключение
отформатированная форма объекта исключения в записи журнала, если запись содержит исключение; в противном случае это выражение формата ничего не добавляет к записи журнала.
Ссылка: http://www.beefycode.com/post/Log4Net-Tutorial-pt-4-Layouts-and-Patterns.aspx
Я полагаю, что ваше исключение будет содержать внутреннее исключение:
Редактировать: использовать метод ILog.Error() вместо ILog.ErrorFormat(). Согласно документации, ErrorFormat() не принимает объект Exception для включения в событие журнала.
После некоторого быстрого поиска в Google я нашел кого-то, у кого была похожая проблема. Решение Фредди Гомеса было:
Вы можете реализовать Renderer (класс, который реализует интерфейс IObjectRenderer) для вашего исключения и поместить необходимую информацию об этом исключении. Затем вам просто нужно добавить элемент в файл конфигурации.
Просто удалось проверить это в исходном коде для Log4Net версии 2.0, и я вижу, что нет никакого учета для регистрации InnerException. Это текущее ограничение Log4Net (версия 2), заключающееся в том, что он не поддерживает рендеринг InnerException из коробки. Вот почему вы бы начали использовать NLog, поскольку он имеет встроенную поддержку рендеринга InnerException - ссылка