В предыдущей части мы рассмотрели предпочтительный способ конфигурации системы логирования в 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.