NLog — библиотека .NET, необходимая для логирования приложений в случаях, когда причину некорректного поведения в системе нельзя определить без дополнительной диагностики. Процесс логирования не вмешивается в работу приложения и не влияет на нее, но создает специальный журнал, в котором хранится информация о состоянии работы приложения. |
---|
Настройка осуществляется через конфигурационный файл NLog.config. Стандартный Nlog отличается в зависимости от типа (.NET Core/TC) и ОС (Win/Linux):
•NLog-Win-TC.config
•NLog-Win.config
•NLog-Linux.config
По умолчанию файл находится в C:\inetpub\wwwroot и каждый раз заменяется на стандартный при накате приложения. Как правило, изменение файла не требует перезапуск пула.
Элементы конфигурации
Вы можете использовать следующие элементы в качестве дочерних элементов для <nlog />. Элементы <targets /> и <rules /> обязательны для присутствия во всех файлах конфигурации NLog, остальные являются необязательными и могут быть полезны в расширенных сценариях.
Элемент |
Описание |
---|---|
<targets /> |
Определяет цели/выходы журнала. Для каждой цели требуется два атрибута: •name — Название цели •type — Тип цели, например: "File", "Database", "Mail ". При использовании пространств имен этот атрибут называется xsi:type. |
<rules /> |
Определяет правила маршрутизации журналов, в которые должна быть записана информация для каждой комбинации имени источника/регистратора и уровня журнала. Правила обрабатываются, начиная с первого в списке. Каждая запись таблицы маршрутизации представляет собой секцию <logger />, в которой находятся следующие атрибуты: •name — Название источника или регистратора. Может включать знак "*" — любая последовательность символов или "?" — любой одиночный символ. Таким образом, имя "*" соответствует любому имени журнала, а "Common*" соответствует всем экземплярам журнала, имена которых начинаются с "Common". •minlevel — Минимальный уровень журнала для соответствия правилу •maxlevel — Максимальный уровень журнала для соответствия правилу •level — Единый уровень журнала для соответствия правилу •levels — Список уровней журнала, разделенных запятыми, которым соответствует правило. •writeTo — Список целей, разделенных запятыми, которые должны быть записаны, когда применяется данное правило. •final — Сделать правило окончательным. |
<extensions /> |
Загружает расширения NLog из файла *.dll. |
<include /> |
Включает внешний файл конфигурации |
<variable /> |
Устанавливает значение переменной конфигурации |
Уровни (Level)
Каждому сообщению в журнале присвоен свой уровень (Level), он определяет его серьезность. Поддерживаются следующие уровни журнала:
Уровень |
Описание |
---|---|
Fatal |
Используется для сообщения об ошибках, вызывающих завершение работы приложения |
Error |
Используется для регистрации ошибок, возникающих во время работы приложения |
Warn |
Используется для сообщений о необычном поведении, которое не является критическим для работы приложения |
Info |
Используется для информационных сообщений о ходе выполнения приложения |
Debug |
Используется для отладки сообщений с расширенной информацией |
Trace |
Очень подробные сообщения журнала, потенциально с высокой частотой и объемом |
Фильтры
Для правил <rules /> можно задать фильтр, он записывается в конфигурации следующим образом:
<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" / > |
Полезные ссылки