Основы логирования в ASP.NET Core. Провайдеры и конфигурация логгирования

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

Провайдеры логирования ASP.NET Core

По умолчанию ASP.NET Core предоставляет следующие провайдеры логирования:

  • Console вывод логов производится в консоль. Провайдер устанавливается методом расширения AddConsole()ILoggingBuilder
  • Debug — здесь для ведения лога используется класс System.Diagnostics.Debug и его метод Debug.WriteLine(). Соответственно все записи лога мы можем увидеть в окне Output в Visual Studio и не можем их увидеть при запуске приложения без отладки. Провайдер устанавливается методом AddDebug().
  • EventSource в Windows логирование ведется в лог ETW (Event Tracing for Windows), для просмотра которого может использоваться инструмент PerfView (или аналогичный). Устанавливается методом AddEventSourceLogger()
  • EventLog записывает лог в Windows Event Log. Устанавливается методом AddEventLog()

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

Конфигурация логирования в ASP.NET Core

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

По умолчанию,конфигурация системы логирования располагается в файлах appsettings.json или appsettings.[Название_среды_окружения].json. Рассмотрим основные элементы конфигурации логера:

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning"
  }
  1. Узел Logging, собственно, содержит настройки логирования в ASP.NET Core.
  2. Узел LogLevel — указывает минимальный уровень для ведения журнала выбранных категорий
  3. Элемент Default — представляется собой «универсальную» категорию, то есть значение этого элемента применяется ко всем категориям
  4. Элемент Microsoft.AspNetCore — указывает, что минимальный уровень будет применяться ко всем категориям, начинающимся Microsoft.AspNetCore, например,"Microsoft.AspNetCore.Routing.EndpointMiddleware"

Так, следуя этим настройкам, в лог будут попадать только предупреждения, ошибки и критические сообщения, если сообщение поступает от классов Microsoft.AspNetCore...и сообщения не ниже уровня Information для всех прочих случаев. То есть, для вашего приложения по умолчанию отключается вывод в лог сообщений уровня Trace или Debug. Проверить это довольно просто — попытаться вывести в лог любое сообщение с уровнем Trace/Debug:

app.Use(async (context, next) => 
{
    app.Logger.LogTrace("Проверка Trace");
    app.Logger.LogDebug("Проверка Debug");
    await next();
});

Лог пустой. Давайте попробуем разрешить вывод всех уровней логов в консоль. Изменим файл  appsettings.Development.json следующим образом:

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}

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

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

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

{
  "Logging": {
    "Console": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.AspNetCore": "Warning"
      }
    },
    "Debug": {
      "LogLevel": {
        "Default": "Trace",
        "Microsoft.AspNetCore": "Warning"
      }
    }
  }
}

Здесь мы установили конфигурацию для консоли и окна отладки в Visual Studio таким образом, что в окно отладки будут попадать все сообщения, а в консоль — только информационные сообщения:

Также, мы можем установить минимальный уровень для вывода лога от нашего приложения. Например, пространство имен моего приложения начинается с «AspLogTest», установим следующую конфигурацию консольного логгера:

{
  "Logging": {
    "Console": {
      "LogLevel": {
        "AspLogTest": "Error",
        "Default": "Information",
        "Microsoft.AspNetCore": "Warning"
      }
    }

Теперь мы будем видеть в консоли сообщения от наших классов только уровня Error и выше:

app.MapGet("/", (ILogger<Program> logger) => 
 {
     logger.LogCritical("Это сообщение появится И в окне отладки И в консоли");
     logger.LogError("Это сообщение появится И в окне отладки И в консоли");
     logger.LogInformation("Это сообщение появится только в окне отладки");
     logger.LogTrace("Это сообщение появится только в окне отладки");
     logger.LogDebug("Это сообщение появится только в окне отладки");
     logger.LogWarning("Это сообщение появится только в окне отладки");
     

     return "Hello World!";
 });

Результат:

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

Итого

Конфигурация системы логирования ASP,NET Core может осуществляться посредствам любого поставщика конфигурации. Одним из наиболее простых способов настройки конфигурации логирования является использование json-файлов.

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