.net core 如何使用ConsoleLogger提供程序创建LoggerFactory?
有四个构造函数:.net core 如何使用ConsoleLogger提供程序创建LoggerFactory?,.net-core,asp.net-core-2.2,.net Core,Asp.net Core 2.2,有四个构造函数: consoleLogger提供程序(IConsoleLogger设置) ConsoleLogger提供程序(IOptionsMonitor) ConsoleLogger提供程序(Func,布尔) ConsoleLogger提供程序(Func、布尔、布尔) 其中三个已被此消息宣布为已过时: 此方法已过时,将在将来的版本中删除。推荐的替代方法是使用LoggerFactory配置筛选,使用ConsoleLogger选项配置日志选项 使用构造函数#3,使用ConsoleLoggerPr
consoleLogger提供程序(IConsoleLogger设置)
ConsoleLogger提供程序(IOptionsMonitor)
ConsoleLogger提供程序(Func,布尔)
ConsoleLogger提供程序(Func、布尔、布尔)
ConsoleLoggerProvider
创建LoggerFactory
非常简单(如上所述):
var loggerFactory=new loggerFactory(new[]{new ConsoleLoggerProvider((类别,级别)=>level>=LogLevel.Information,true)});
但由于它已被弃用,我们只剩下构造函数#2。以下是我发现的等价物:
var configureNamedOptions=new configureNamedOptions(“,null);
var optionsFactory=newoptionsfactory(new[]{configureNamedOptions},Enumerable.Empty());
var optionsMonitor=new optionsMonitor(optionsFactory,Enumerable.Empty(),new optioncache());
var loggerFactory=new loggerFactory(new[]{new ConsoleLoggerProvider(optionsMonitor)},new LoggerFilterOptions{MinLevel=LogLevel.Information});
这似乎太复杂了,我是不是错过了一些更简单的东西?在.NET Core 2.2中,您可以通过Microsoft的依赖项注入框架构建一个
ILoggerFactory
,而无需使用过时的方法。它比所有东西都是手工构建的版本要简单一点。以下是方法:
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Logging;
IServiceCollection serviceCollection=新serviceCollection();
serviceCollection.AddLogging(生成器=>builder
.AddConsole()
.AddFilter(级别=>级别>=日志级别.Information)
);
var loggerFactory=servicecolection.BuildServiceProvider().GetService();
在.NET Core 3.0中,您可以使用:
var loggerFactory=loggerFactory.Create(builder=>{
builder.AddFilter(“Microsoft”,LogLevel.Warning)
.AddFilter(“系统”,日志级别。警告)
.AddFilter(“SampleApp.Program”,LogLevel.Debug)
.AddConsole();
}
);
@0xced感谢您解构的示例,因为代理不在Powershell中工作,这有助于我在Powershell中执行同样的操作:
$optionsFactory = [OptionsFactory[ConsoleLoggerOptions]]::new(
[List[ConfigureNamedOptions[ConsoleLoggerOptions]]]@(
[ConfigureNamedOptions[ConsoleLoggerOptions]]::new('',$null)
),
[List[IPostConfigureOptions[ConsoleLoggerOptions]]]::new()
)
$optionsMonitor = [OptionsMonitor[ConsoleLoggerOptions]]::new(
$optionsFactory,
[List[IOptionsChangeTokenSource[ConsoleLoggerOptions]]]::new(),
[OptionsCache[ConsoleLoggerOptions]]::new()
)
$consoleLoggerProvider = [ConsoleLoggerProvider]$OptionsMonitor
$consoleLoggerProviderList = [List[ILoggerProvider]]::new()
$consoleLoggerProviderList.add($consoleLoggerProvider)
$loggerFactory = [LoggerFactory]::new(
$consoleLoggerProviderList,
[LoggerFilterOptions]@{
MinLevel = [LogLevel]::Information
}
)
以防万一,如果有人想在asp.net core composition root for efcore中执行此操作:
services.AddDbContext<DbContext>(opt => {
opt.AddSqlServer(Configuration.GetConnectionString("DefaultConnection"));
opt.UseLoggerFactory(LoggerFactory.Create(builder => { builder.AddConsole(); }));
});
services.AddDbContext(opt=>{
opt.AddSqlServer(Configuration.GetConnectionString(“DefaultConnection”);
opt.UseLoggerFactory(LoggerFactory.Create(builder=>{builder.AddConsole();}));
});
这对于应用程序组合来说非常好,但当我编写测试或使用REPL时又如何呢?如果能够以更直接的方式实现ILogger
依赖关系,那就太好了LoggerFactory
几乎足够短,但可发现性并不理想…仅供参考第一个示例。AddConsole()需要引用Microsoft.Extensions.Logging.ConsoleMethoding@Microsoft,而对于这样一个简单的任务,我们需要依赖项注入和一系列选项,providers and factoriesFYI使用.AddConsole()还要求您导入nuget软件包Microsoft.Extensions.Logging.Console。这绝对是.NET5的疯狂,它变得更糟,而不是更好。。。。。