Основы логирования в ASP.NET Core. Фильтрация логов и идентификаторы событий

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

Фильтры логирования

Фильтр логирования задается с помощью метода AddFilter(), который позволяет задать для определенной категории минимальный уровень логгирования. Например:

var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddFilter("Microsoft", LogLevel.Trace);

Здесь мы задали для категории Microsoft минимальный уровень логирования Trace. Аналогичная настройка с помощью файла appsettings.json выглядела бы следующим образом:

{
  "Logging": {
    "LogLevel": {
      "Microsoft": "Trace"
    }
  }
}

Также,мы можем воспользоваться второй версией метода AddFilter() и указать конкретный провайдер дл которого устанавливается фильтр:

var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddFilter<ConsoleLoggerProvider>("System", LogLevel.Debug);

Что будет аналогично записи в appsettings.json:

{
  "Logging": {
    "Console": {
      "LogLevel": {
        "System": "Debug"
      }
    }
  }
}

Идентификатор события лога

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

public static class MyEvents
{
    public static EventId LoadMainPage { get; } = new EventId(10001, "LoadMainPage");
    public static EventId TestEvent { get; } = new EventId(10002, "TestEvent");
}

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


        app.MapGet("/", (ILogger<Program> logger) => 
        {
            logger.LogInformation(MyEvents.TestEvent, "Тестирование идентификатора событий");
            logger.LogInformation(MyEvents.LoadMainPage, "Загрузили главную страницу");

            return "Hello World!";
        });

        app.Run();
    }
}

Здесь мы определили статический класс MyEvents в котором определили два идентификатора событий LoadMainPage и TestEvent типа EventId. При записи лога мы используем эти идентификаторы:

logger.LogInformation(MyEvents.TestEvent, "Тестирование идентификатора событий"); 
logger.LogInformation(MyEvents.LoadMainPage, "Загрузили главную страницу");

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

В принципе, класс MyEvents можно упростить до следующего:

public class MyEvents
{
    public const int LoadMainPage = 10001;
    public const int TestEvent  = 10002;
}

визуально, результат работы приложения будет тот же.

Глобальная настройка логирования

Кроме рассмотренных ранее вариантов настройки логирования в ASP.NET Core, мы также можем произвести глобальную настройку логирования. У объекта WebApplicationBuilder определено свойство Logging, которое реализует интерфейс ILogingBuilder. В свою очередь, у ILogingBuilder определены следующие методы:

Метод Описание
AddConfiguration() добавляет конфигурацию логгера в виде объекта, реализующего IConfiguration
AddConsole() добавляет консольный логгер
AddConsoleFormatter() добавляет объект форматирования для консольного вывода
AddJsonConsole() добавляет форматирование сообщений консольного логгера в формат «json»
AddSimpleConsole() добавляет простое форматирование для логгирования на консоль
AddDebug() добавляет логгер отладки
AddEventLog() добавляет логгер для вывод в журнал Windows Event Log
AddEventSourceLogger() добавляет логгер для вывода в лог Event Tracing for Windows
AddFilter() добавляет фильтрацию для сообщений логгера (см. примеры выше)
AddProvider()
добавляет провайдер логгирования
ClearProviders()
удаляет все зарегистрированные провайдеры логгирования
SetMinimumLevel()
устанавливает минимальный уровень логгирования

 

Например, мы можем провести такую настройку системы логирования:

var builder = WebApplication.CreateBuilder(args);

builder.Logging.ClearProviders();//удаляем все провайдеры
builder.Logging.AddJsonConsole();//добавляем вывод в консоль JSON

В результате получим вот такой вывод:

Итого

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

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