Как создать LoggerFactory с ConsoleLoggerProvider? - PullRequest
0 голосов
/ 09 декабря 2018

ConsoleLoggerProvider имеет четыре конструктора:

  1. ConsoleLoggerProvider(IConsoleLoggerSettings)
  2. ConsoleLoggerProvider(IOptionsMonitor<ConsoleLoggerOptions>)
  3. ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean)
  4. ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean, Boolean)

Три из них объявлены устаревшими с этим сообщением:

Этот метод устарел и будет удален в следующей версии.Рекомендуемой альтернативой является использование LoggerFactory для настройки фильтрации и ConsoleLoggerOptions для настройки параметров ведения журнала.

С конструктором # 3 создание LoggerFactory с ConsoleLoggerProvider достаточно просто (как описано в EntityFramework 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 Ответ

0 голосов
/ 09 декабря 2018

В .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();
    }
);
...