C# Подключаем NLog в наш проект RageMp

Начиная разрабатывать проект мы с вами сталкиваемся с надобностью отслеживания логики поведения нашего проекта, существует много вариантов как это сделать, но сегодня мы остановимся на довольно крутом инструменте NLog. Зачем разрабатывать свой велосипед, если все давно сделали за вас? ;)

Если вы незнакомы с NuGet, прошу почитать пару статей: Что такое NuGet и Как импортировать пакеты NuGet в ваш проект

Первое то что нам необходимо сделать, это подключить наш NuGet пакет NLog и его дополнительные пакеты (NLog.Schema и NLog.Config).
Далее мы переходим к настройке, для этого перейдем в NLog.config.

NLog.config

Конфиг необходим для настройки поведения логов, какие логи будут записываться и куда они будут записываться.
Содержимое конфига разбито на блоки, мы будет работать с блоком Targets и Rules.

Targets

Цели, куда и в каком формате будет записан лог.
В этом блоке мы создаем точку записи, разберем все по отдельности.

Type - куда будет записываться лог. Список всех типов.
Name - Имя для цели.
Остальные параметры описываются в зависимости от Type. Их можно найти в списке всех типов, ссылка выше.

Пример записи лога в файл, где {basedir} это директория в которой находится ваша программа, {shortdate} означает дату в коротком формате.
XML:
<!--
      Данная цель сохраняет лог в файл вида logs\2018-04-20.log
      вид сообщения: 2018-04-20 12:27:05.9121 DEBUG debug message
-->
<target xsi:type="File" name="filedata" fileName="${basedir}/logs/${shortdate}.log"
                  layout="${longdate} ${uppercase:${level}} ${message}" />

Rules​

Правила, исходя из чего будет записан тот или иной лог.
Ну здесь я разберу очень простой пример.

Name - имя правила, НЕ цели.
Minlevel - минимальный уровень логирования который будет записываться для цели.
WriteTo - название цели к которому относится правило.

XML:
<rules>
  <logger name="*" minlevel="Warn" writeTo="target1" />
</rules>

Объявление​

Чтобы объявить логер нам необходимо написать:
C#:
private Logger logger = LogManager.GetCurrentClassLogger();
Именно так рекомендуется объявлять логер в вашем классе.

Уровни логирования​

C#:
Logger logger = LogManager.GetCurrentClassLogger(); // Чтобы было к чему обращаться
log.Trace("trace message"); // Для пошаговой отладки (самый маленький уровень логирования)
log.Debug("debug message"); // Для стандартной отладки
log.Info("info message"); // Информационные сообщения
log.Warn("warn message"); // Предупреждение, еще не ошибка, но нужно решать проблему
log.Error("error message"); // Ошибка, но программа продолжает работать, требует незамедлительного исправления
log.Fatal("fatal message"); // Фатальная ошибка, программа продолжать работу корректно не может

Код:
2021-05-22 12:21:46.1380 | TRACE | NLogUnderstanding.Program | trace message
2021-05-22 12:21:46.1380 | DEBUG | NLogUnderstanding.Program | debug message
2021-05-22 12:21:46.1380 | INFO | NLogUnderstanding.Program | info message
2021-05-22 12:21:46.1380 | WARN | NLogUnderstanding.Program | warn message
2021-05-22 12:21:46.1380 | ERROR | NLogUnderstanding.Program | error message
2021-05-22 12:21:46.1381 | FATAL | NLogUnderstanding.Program | fatal message

Больше информации на GitHub
Да, очень кратко, но буду смотреть на вопросы и дополнять статью.
 

Lev Angel

Developer
Команда форума
Спасибо за туториал! Крутая библиотека. А она умеет делать ротацию логов?
 

Designed

Trainee
Спасибо за туториал! Крутая библиотека. А она умеет делать ротацию логов?
Ну если я правильно понял вопрос, то для каждого типа (запись в файл, в базу) она реализуется по разному. Например если работать с файлами, то есть специальные артибуты.

deleteOldFileOnStartup - Удаляет старые логи после перезапуска приложения
archiveAboveSize - если размер больше указанного значения в байтах, то автоматически архивируем.
maxArchiveFiles - если кол-во архивированных логов становится больше чем указанно, то самые старые логи автоматически удаляются.
maxArchiveDays - если архивированные логи хранятся больше N указанных дней, то они автоматом чистятся.

Там много атрибутов разных
 

Lev Angel

Developer
Команда форума
Да, то что надо. Для логгера это крутая фича.
А то в один прекрасный момент можно обнаружить что логи забили все место на сервере :)
 
Яндекс.Метрика
Верх