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