Andriy Shyrokoryadov

.Net developer, data scientist

№10 Логирование в Asp.Net Core [#65].

Текст к видео "Логирование в Asp.Net Core" на канале YouTube

Привет всем! После небольшой паузы возвращаемся к обзору фреймворка ASP.NET Core. Сегодня мы поговорим о логировании. Логирование это запись информации о том, что происходило в приложении, когда происходило и при каких обстоятельствах. Такая записанная информация называется логом. Что конкретно будет записано в логе зависит от нас самих, от программистов. Можно впадать в крайности – не записывать в лог практического ничего либо записывать настолько много, что через текст лога тяжело будет пролезть и там будет сложно найти ответы на наши вопросы. Основным вопросом, на который может ответить качественный лог – это что пошло не так и какова была причина ошибки. Как правило, мы узнаем на сколько качественный наш лог тогда, когда нам приходится им воспользоваться. Если при чтении лога мы понимаем, что нам не хватает какой-то информации, то, к сожалению, наш лог требует улучшения.

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

  • NLog
  • Log4net
  • Встроенный провайдер логирования в ASP.NET Core
  • Еще около 10 различных библиотек

Названные мной библиотеки – это библиотеки, которыми я пользовался и, по сути, ничего плохого об этих библиотеках я не могу сказать. В интернете на форумах можно поискать дискуссии о том, какая библиотека работает быстрее. Однако во всех компаниях, где я работал, скорость работы записи в лог не была критичной, и никто на этом не заострял внимание. Я даже не знаю какие факторы влияли на выбор той или иной библиотеки. Просто я пришел в компанию, а конкретная библиотека для записи логов уже была выбрана и успешно использовалась в конкретном приложении.

Мне кажется, каждая библиотека логирования должна иметь ряд определенных функциональностей:

  • функциональность чтения и использования конфигурации
  • поддержка записи логов на определенные носители (база данных, файлы, экран консоли)
  • интерфейс для добавления записей в лог в коде
  • интерфейс для добавления записей в лог с использование объекта типа Exception
  • группировка логов по уровням (Debug, Trace, Info, Warning, Error, Fatal)

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

Сегодня мы познакомимся с примером использования встроенного фреймворка для логирования в ASP.NET Core, а также посмотрим, как работает библиотека NLog с фреймворком ASP.NET Core. То есть схема такая же, как и в случае с фреймворками внедрения зависимостей. У вас есть право выбора: используете то, что вам дано вместе с ASP.NET Core либо, если вам недостаточно, вы в праве использовать любую другую библиотеку, которая поддерживает ASP.NET Core.

По умолчанию стандартная функциональность для логирования в ASP.NET Core включает в себя несколько провайдеров, то есть мест, где мы можем записать наши логи. Все нижеперечисленные провайдеры имеет возможность сохранить логи на носителе данных, кроме провайдера логов на консоль:

  • консоль
  • Debug
  • EventSource
  • EventLog – только для приложений запущенных в ОС Windows

В практическом примере мы увидим, как работают провайдеры Debug и консоль.

Для решения проблемы слишком маленьких и слишком больших логов используются уровни логирования. Каждая запись в логе имеет свой уровень логирования начиная от самого незначительного уровня Tracе и заканчивая самым серьезным уровнем типа Fatal или Critical.

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

В среде разработки всё зависит от ваших предпочтений и предпочтений команды, в которой вы работаете. Однако стоит помнить, что с очень детализированными логами тяжело работать если вы не используете приложения для фильтрования и поиска в логах. Например, приложение Elastic Search.

При поиске причин ошибок, в производственной среде можно включить уровень логирования на более низкий чем Warning для определенных категорий. Информация будет детальна, но для ограниченного количества классов.

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

Давайте перейдем к практической части данного видео и посмотрим как всё это работает на практике.

Пример кода из видео на GitHub

Для открытия файла проекта необходимо Visual Studio 2019.