Содержание
Более продвинутый способ программной настройки ведения журналов в приложении является использование фильтрации. Функция фильтрации вызывается для всех поставщиков и категорий, которым не назначены правила конфигурацией или кодом.
Фильтры логов. Пример
Например, воспользуемся функцией фильтрации
using Microsoft.Extensions.Logging.Console; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Logging.AddFilter<ConsoleLoggerProvider>("Microsoft.AspNetCore", LogLevel.Warning); builder.Logging.AddFilter<ConsoleLoggerProvider>("Microsoft.Hosting", LogLevel.Information); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
В этом примере мы дважды вызываем метод расширения AddFilter<T>()
для установки минимального уровня двух категорий журнала — Microsoft.AspNetCore
и Microsoft.Hosting
. По сути, этими вызовами мы создали ту же самую конфигурацию журнала для провайдера ConsoleLoggerProvider
, как и в файле appsettings.json
, который создается по умолчанию. Если запустить приложение, то можно увидеть уже привычные нам информационные сообщения.
Метод AddFilter()
имеет ряд перегруженных версий, благодаря чему мы можем фильтровать сообщения самыми различными способами. Например, используем ещё одну версию этого метода:
using Microsoft.Extensions.Logging.Console; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Logging.AddFilter<ConsoleLoggerProvider>((category, logLevel) => { if (category.Contains("Microsoft.AspNetCore") && logLevel == LogLevel.Warning) return true; else if (category.Contains("Microsoft.Hosting") && logLevel == LogLevel.Information) return true; return false; }); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
В этом примере метод AddFilter<T>()
принимает в качестве параметра делегат вида Func<string, LogLevel, bool>
. Первый параметр – это имя категории, второй – минимальный уровень лога, которые необходимо вывести, третий – результат. Если результат равен true
, то сообщение будет отправлено в журнал. Таким образом, нетрудно разобраться с тем, что за фильтр мы установили: если категория содержит «Microsoft.AspNetCore» и уровень не ниже Warning
ИЛИ категория содержит «Microsoft.Hosting» и уровень не ниже Information
, то сообщение выводится в консоль. Результат применения этого фильтра соответствует предыдущему примеру также соответствует настройкам лога по умолчанию.
Итого
Для программной настройки ведения логов в приложении ASP.NET Core могут использоваться различные фильтры. Фильтры логов устанавливаются при использовании метода AddFilter<T>()
где в качестве универсального параметра T
выступает класс провайдера ведения лога.