Основы логирования в ASP.NET Core. Интерфейс ILogger

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

ASP.NET Core имеет встроенную поддержку логирования, что позволяет нам с минимальными издержками вести логи, в большинстве случаев, без создания своих сервисов. Для логирования данных в ASP.NET Core используются объекты, реализующие интерфейс ILogger<T>.

Пример лога

С логированием в ASP.NET Core мы сталкиваемся с самого первого приложения. Если вы запустите приложение и откроете консоль, то первое, что вы там увидите — это информационные сообщения об основных настройках системы:

Здесь нам сообщается о том, по каким адресам доступно наше приложение, о том, что приложение запущено и как его остановить, наименование среды окружения и путь к папке с содержимым приложения.

ASP.NET Core выводит эти сообщения, используя штатный сервис логирования, который мы можем получить через механизм внедрения зависимостей или же, используя свойство Logger объекта WebApplication. Рассмотрим оба этих варианта.

Использование свойства Logger объекта WebApplication

Создадим новое приложение ASP.NET Core с шаблоном Empty и напишем такой компонент middleware:

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        var app = builder.Build();

        app.Use(async (context, next) =>
        {
            app.Logger.LogInformation("Путь запроса {0}", new string[]{ context.Request.Path});
            await next(); 
        });

        app.MapGet("/", () => "Hello World!");

        app.Run();
    }
}

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

app.Logger.LogInformation("Путь запроса {0}", new string[]{ context.Request.Path});

и, если запустить приложение, то можно получить интересную информацию о работе нашего приложения в браузере:

Мы выполняем одно действие — загружается главная страница приложения (в логе — это путь «/«). Фактически же выполняется два запроса: первый — наш, второй — браузер запрашивает favicon сайта (о чем говорит вторая строка лога). Такое поведение характерно для браузера Edge, Chrome, Яндекс.Браузера и т.д.

Получение сервиса логирования через механизм DI

Перепишем наше приложение и вместо компонента middleware создадим конечную точку для которой запросим штатный сервис логирования:

app.MapGet("/", (ILogger<Program> logger) =>
{
    logger.LogInformation($"Время доступа: {DateTime.Now}");
    return "Hello world";
});

Здесь мы запрашиваем логгер с категорией Program. В приложении запись лога будет следующей

И здесь мы подходим к следующему вопросу — категория логгера.

Категория логгера

В качестве категории логгера в ASP.NET Core выступает название класса, в котором используется логгер. Например, в примере выше мы использовали логгер в классе Program и, соответственно, через механизм DI запрашивали сервис логирования:

app.MapGet("/", (ILogger<Program> logger) =>

Использование категорий позволяет сделать лог более информативным — по названию категории логгера сразу становится понятным из какого класса пришло сообщение.

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

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

LogLevel Значение Метод ILogger Описание
Trace 0 LogTrace Содержат наиболее подробные сообщения. Эти сообщения могут содержать конфиденциальные данные приложения, информацию о настройках системы и т.д.. Сообщения такого уровня не должны включаться в логи опубликованного приложения, но могут быть ценны для отладки.
Debug 1 LogDebug Информация для отладки и разработки.
Information 2 LogInformation Информация, позволяющая отследить поток приложения (примеры см. выше).
Warning 3 LogWarning На случай ненормальных или неожиданных событий. Обычно включает ошибки или условия, которые не приводят к сбою приложения, но могут иметь серьезные последствия для работы приложения в будущем.
Error 4 LogError Используется для вывода информации об ошибках и исключениях, которые невозможно обработать. Эти сообщения указывают на сбой в текущей операции или запросе, а не на сбой всего приложения.
Critical 5 LogCritical При сбоях, требующих немедленного внимания. Примеры: потеря данных, нехватка места на диске
None 6 Указывает, что сообщение не должно выводится в лог приложения.

Каждый метод из таблицы выше имеет несколько перегрузок, которые могут принимать различное количество параметров, а именно:

  • string data— сообщение для лога
  • int eventId — числовой идентификатор, который связан с логом.
  • string format — сообщения для лога, которое может содержать параметры
  • object[] args— набор параметров для строкового сообщения (если используется версия метода с параметром string format)
  • Exception error— логгируемый объект исключения.

Также, у ILogger определен универсальный метод, с помощью которого можно выводить сообщения любого уровня — Log(). Например,

logger.Log(LogLevel.Information, "Информация для размышления");

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

По умолчанию, сообщения уровней Trace и Debug отключены в ASP.NET Core и для из включения необходима настройка логирования о которой мы поговорим в следующей части.

 Итого

Логирование (ведение логов, журналирование) — это процесс записи наиболее значимой информации о работе системы с возможностью быстрого доступа к этой информацией в случае необходимости. ASP.NET Core позволяет логировать информацию о работе приложения сразу после запуска, используя штатный сервис логирования — Logger, который мы можем запрашивать через механизм внедрения зависимостей или же использовать свойство Logger объекта WebApplication. Для информативности логов в ASP.NET Core применяются различные уровни и категории логирования.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии