Dot-Net-Core
如何使用 ConsoleLoggerProvider 創建 LoggerFactory?
ConsoleLoggerProvider有四個建構子:
ConsoleLoggerProvider(IConsoleLoggerSettings)ConsoleLoggerProvider(IOptionsMonitor<ConsoleLoggerOptions>)ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean)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(); } );也可以看看: