如何使用ConsoleLoggerProvider创建LoggerFactory? [英] How to create a LoggerFactory with a ConsoleLoggerProvider?
问题描述
ConsoleLoggerProvider 具有四个构造函数:
-
ConsoleLoggerProvider(IConsoleLoggerSettings)
-
ConsoleLoggerProvider(IOptionsMonitor< ConsoleLoggerOptions>)
-
ConsoleLoggerProvider(Func< String,LogLevel,Boolean> ;,布尔)
-
ConsoleLoggerProvider(Func< String,LogLevel,Boolean> ;,布尔,布尔)
ConsoleLoggerProvider(IConsoleLoggerSettings)
ConsoleLoggerProvider(IOptionsMonitor<ConsoleLoggerOptions>)
ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean)
ConsoleLoggerProvider(Func<String,LogLevel,Boolean>, Boolean, Boolean)
其中三个已被废弃,并显示以下消息:
Three of them are declared obsolete with this message:
此方法已过时,将在以后的版本中删除。推荐的替代方法是使用LoggerFactory配置过滤,并使用ConsoleLoggerOptions配置日志记录选项。
This method is obsolete and will be removed in a future version. The recommended alternative is using LoggerFactory to configure filtering and ConsoleLoggerOptions to configure logging options.
使用构造函数#3,创建<$ c $带有 ConsoleLoggerProvider
的c> LoggerFactory 很简单(如实体框架核心-记录):
With constructor #3, creating a LoggerFactory
with a ConsoleLoggerProvider
is straightforward (as documented on Entity Framework Core - Logging):
var loggerFactory = new LoggerFactory(new[] { new ConsoleLoggerProvider((category, level) => level >= LogLevel.Information, true) });
但是由于已弃用,我们只剩下构造函数2。这是我发现的等效项:
But since it's deprecated, we are left with constructor #2. Here's what I found to be equivalent:
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 });
这似乎过于复杂,我是否缺少简单的东西?
This seems overly complicated, am I missing something simpler?
推荐答案
在.NET Core 2.2中,您可以构建 ILoggerFactory
,而无需通过Microsoft的依赖项注入框架使用过时的方法。它比手动构建所有内容的版本要复杂一些。方法如下:
In .NET Core 2.2, you can build an ILoggerFactory
without using obsolete methods through Microsoft's dependency injection framework. It's a little less verbose than the version where everything is constructed by hand. Here’s how:
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 :
And in .NET Core 3.0, you can use LoggerFactory.Create:
var loggerFactory = LoggerFactory.Create(builder => {
builder.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
.AddFilter("SampleApp.Program", LogLevel.Debug)
.AddConsole();
}
);
这篇关于如何使用ConsoleLoggerProvider创建LoggerFactory?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!