首页 文章

如何使用ConsoleLoggerProvider创建LoggerFactory?

提问于
浏览
0

ConsoleLoggerProvider有四个构造函数:

  • ConsoleLoggerProvider(IConsoleLoggerSettings)

  • ConsoleLoggerProvider(IOptionsMonitor<ConsoleLoggerOptions>)

  • ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean)

  • ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean, Boolean)

其中三个被宣布为过时的消息:

此方法已过时,将在以后的版本中删除 . 建议的替代方法是使用LoggerFactory配置筛选,使用ConsoleLoggerOptions配置日志记录选项 .

使用构造函数#3,使用 ConsoleLoggerProvider 创建 LoggerFactory 非常简单(如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 回答

  • 0

    您可以在不使用Microsoft 's dependency injection framework. It'的过时方法的情况下构建 ILoggerFactory ,而不是手动构建所有内容的版本 . 这是如何做:

    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>();
    

    注意:我已向EF Core文档提交了拉取请求:Update EFLogging sample code to not use obsolete functions

相关问题