Перейти к содержанию

NLog

ℹ️ NLog — библиотека .NET, необходимая для логирования приложений в случаях, когда причину некорректного поведения в системе нельзя определить без дополнительной диагностики. Процесс логирования не вмешивается в работу приложения и не влияет на нее, но создает специальный журнал, в котором хранится информация о состоянии работы приложения

Настройка осуществляется через конфигурационный файл NLog.config. Стандартный Nlog отличается в зависимости от типа (.NET Core/TC) и ОС (Win/Linux):

  • NLog-Win-TC.config

  • NLog-Win.config

  • NLog-Linux.config

По умолчанию файл находится в C:\inetpub\wwwroot и каждый раз заменяется на стандартный при накате приложения. Как правило, изменение файла не требует перезапуска пула.

NLog.config для всех инстансов является универсальным и единым. Используется конфигурационный файл, который находится в репозитории и автоматически включается во все сборки. Кастомизация файла на площадках IIS и в контейнерах не предусмотрена.

Элементы конфигурации

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

Элемент Описание
Определяет цели/выходы журнала. Для каждой цели требуется два атрибута: , name — Название цели , type — Тип цели, например: "File", "Database", "Mail ". При использовании пространств имен этот атрибут называется xsi:type.
Определяет правила маршрутизации журналов, в которые должна быть записана информация для каждой комбинации имени источника/регистратора и уровня журнала. Правила обрабатываются, начиная с первого в списке. Каждая запись таблицы маршрутизации представляет собой секцию , в которой находятся следующие атрибуты: , name — Название источника или регистратора. Может включать знак "*" — любая последовательность символов или "?" — любой одиночный символ. Таким образом, имя "*" соответствует любому имени журнала, а "Common*" соответствует всем экземплярам журнала, имена которых начинаются с "Common". , minlevel — Минимальный уровень журнала для соответствия правилу , maxlevel — Максимальный уровень журнала для соответствия правилу , level — Единый уровень журнала для соответствия правилу , levels — Список уровней журнала, разделенных запятыми, которым соответствует правило. , writeTo — Список целей, разделенных запятыми, которые должны быть записаны, когда применяется данное правило. , final — Сделать правило окончательным.
Загружает расширения NLog из файла *.dll.
Включает внешний файл конфигурации
Устанавливает значение переменной конфигурации

Уровни (Level)

Каждому сообщению в журнале присвоен свой уровень (Level), он определяет его серьезность. Поддерживаются следующие уровни журнала:

Уровень Описание
Fatal Используется для сообщения об ошибках, вызывающих завершение работы приложения
Error Используется для регистрации ошибок, возникающих во время работы приложения
Warn Используется для сообщений о необычном поведении, которое не является критическим для работы приложения
Info Используется для информационных сообщений о ходе выполнения приложения
Debug Используется для отладки сообщений с расширенной информацией
Trace Очень подробные сообщения журнала, потенциально с высокой частотой и объемом

Фильтры

Для правил можно задать фильтр, он записывается в конфигурации следующим образом:

<rules>
  <logger name="*" minlevel="Info" writeTo="target1">
    <filters defaultAction='Log'>
      <when condition="contains('${message}','Common')" action="Ignore" />
    </filters>
  </logger>
</rules>

Результатом работы фильтра является значение типа FilterResult. Если условие фильтра возвращает true, то результатом работы фильтра становится значение, указанное в атрибуте action (в примере выше — Ignore). Если же условие возвращает false, то результатом работы фильтра будет Neutral.

Действие по умолчанию для фильтрации (при несоответствии ни одному правилу) устанавливается с помощью атрибута defaultAction у элемента filters (в примере выше — Log). Возможные значения:

Значение Описание
Neutral Нейтральное. Значение по умолчанию. От фильтра не будет зависеть действие с сообщением
Log Сообщение будет записано в лог, обработка продолжится
LogFinal Сообщение будет записано, NLog прекращает обработку
Ignore Сообщение не будет записано в лог, обработка продолжится
IgnoreFinal Сообщение не будет записано, NLog прекращает обработку

Результат работы фильтров вычисляется в методе GetFilterResult. Он равен результату работы первого фильтра, вернувшего не Neutral. Это означает, что если некоторый фильтр возвращает значение, отличное от Neutral, все последующие фильтры не выполняются.

ℹ️ На серверах с TaskCenter рекомендуется использовать значение filters defaultAction="Neutral"

Layout Renderers

NLog поддерживает несколько пользовательских средств визуализации макета (Layout Renderers) в дополнение к стандартным средствам. Они могут быть включены в любую секцию и будут заменены соответствующим значением, если оно доступно.

Записываются в виде ${ }. Пример:

<target name="f" xsi:type="File" filename="${shortdate}.txt" />

Настройки

ℹ️ В таблице приведен не полный список настроек, он будет пополняться со временем

Настройка Описание
writeErrorsToDB Писать ошибки в БД. Если настройка активна, сообщения об ошибках будут сохраняться в БД, в таблице ExceptionsLog. Значение по умолчанию — True. < variable name\="writeErrorsToDB" value\="True" / >
writeErrorsToEventLog Писать ошибки в Event Log сервера. Если настройка активна, ошибки можно просматривать через Event Viewer сервера приложения. Значение по умолчанию — False. < variable name\="writeErrorsToEventLog" value\="False" / >
mailErrors Слать ошибки на почту. Если настройка активна, то сообщения об ошибках будут отправляться на почтовый ящик, указанный в общих настройках приложения как "Email для отправки ошибок". Значение по умолчанию — False. < variable name\="mailErrors" value\="False" / >
logLogicErrors Писать в лог логические ошибки. Если настройка активна, в журнал ошибок будут писаться предупреждения из интерфейса пользователя (например, при попытке постановки задачи с незаполненным обязательным полем и т.п.) Значение по умолчанию — True. < variable name\="logLogicErrors" value\="True" / >

Полезные ссылки

Как включить NLog