Как создать LoggerFactory с ConsoleLoggerProvider?
ConsoleLoggerProvider имеет четыре конструктора:
-
ConsoleLoggerProvider(IConsoleLoggerSettings)
-
ConsoleLoggerProvider(IOptionsMonitor<ConsoleLoggerOptions>)
-
ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean)
-
ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean, Boolean)
Три из них объявлены устаревшими с этим сообщением:
Этот метод устарел и будет удален в следующей версии. Рекомендуемой альтернативой является использование LoggerFactory для настройки фильтрации и ConsoleLoggerOptions для настройки параметров ведения журнала.
С конструктором № 3 создание LoggerFactory
с ConsoleLoggerProvider
является простым (как ConsoleLoggerProvider
в Entity Framework Core - Logging):
var loggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider((category, level) => level >= LogLevel.Information, true) });
Но так как это устарело, мы остались с конструктором № 2. Вот что я нашел эквивалентным:
var configureNamedOptions = new ConfigureNamedOptions<ConsoleLoggerOptions>("", null);
var optionsFactory = new OptionsFactory<ConsoleLoggerOptions>(new []{ configureNamedOptions }, Enumerable.Empty<IPostConfigureOptions<ConsoleLoggerOptions>>());
var optionsMonitor = new OptionsMonitor<ConsoleLoggerOptions>(optionsFactory, Enumerable.Empty<IOptionsChangeTokenSource<ConsoleLoggerOptions>>(), new OptionsCache<ConsoleLoggerOptions>());
var loggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider(optionsMonitor) }, new LoggerFilterOptions { MinLevel = LogLevel.Information });
Это кажется слишком сложным, я что-то упустил?
Ответы
Ответ 1
В .NET Core 2.2 вы можете создать ILoggerFactory
без использования устаревших методов с помощью инфраструктуры внедрения зависимостей Microsoft. Это немного менее многословно, чем версия, где все построено вручную. Вот как:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder => builder
.AddConsole()
.AddFilter(level => level >= LogLevel.Information)
);
var loggerFactory = serviceCollection.BuildServiceProvider().GetService<ILoggerFactory>();
А в .NET Core 3.0 вы можете использовать LoggerFactory.Create:
var loggerFactory = LoggerFactory.Create(builder => {
builder.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
.AddFilter("SampleApp.Program", LogLevel.Debug)
.AddConsole();
}
);
Ответ 2
Как я могу использовать "ConsoleLoggerProvider" с .NET Core 3.0, как показано ниже
введите описание изображения здесь
Когда я использую его, я получаю сообщение об ошибке: "ConsoleLoggerProvider не содержит конструктор, который принимает 2 аргумента"