Dot-Net-Core

如何使用 ConsoleLoggerProvider 創建 LoggerFactory?

  • December 9, 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使用 a創建 aConsoleLoggerProvider很簡單(如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 });

這似乎過於復雜,我錯過了一些更簡單的東西嗎?

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

也可以看看:

引用自:https://stackoverflow.com/questions/53690820