Lie*_*ero 20 c# logging .net-core asp.net-core .net-core-logging
我的asp.net core 2.x app有典型的日志记录要求:
现在我看到至少有三种不同的API来配置日志记录:
WebHostBuilder.ConfigureLogging()在Program.cs中
public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddAzureWebAppDiagnostics();
})
.UseStartup<Startup>()
.Build();
webHost.Run();
}
Run Code Online (Sandbox Code Playgroud)注入ILoggerFactoryStartup.Configure方法:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
{
loggerFactory.AddConsole();
loggerFactory.AddAzureWebAppDiagnostics();
loggerFactory.AddApplicationInsights(app.ApplicationServices,
(category, level) => level >= (category == "Microsoft" ? LogLevel.Error : LogLevel.Information));
}
Run Code Online (Sandbox Code Playgroud)在Startup.ConfigureServices中:
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(logging =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddAzureWebAppDiagnostics();
}
}
Run Code Online (Sandbox Code Playgroud)那些有什么区别?什么时候用哪个?
Bjo*_*cke 10
在 ASP.NET Core 3.x 中,第一个示例现在是认可的选项。正如文档所解释的
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Run Code Online (Sandbox Code Playgroud)
另一个变化是不再支持在 Startup.ConfigureServices 方法中完成 DI 容器设置之前写入日志:
也不支持在主机构建期间进行日志记录(因为尚未设置 DI 容器),文档建议为这种情况创建一个单独的记录器。
第三种用法ConfigureServices是的公共方法WebHostBuilder。而第一个用途ConfigureLogging是IHostBuilder的扩展方法之一HostingHostBuilderExtensions。
并且它们都在under 包中调用IServiceCollection的扩展方法。该方法首先尝试将两个单和和的枚举。然后做动作的记录()的最后调用的方法添加由这些供应商(控制台,天青),并调用执行日志商加入AddLoggingLoggingServiceCollectionExtensionsMicrosoft.Extensions.LoggingAddLoggingILoggerFactoryILogger<>LoggerFilterOptionsILoggingBuilderAddProviderSetMinimumLevelLoggerFilterOptions
第二种方法直接将日志提供程序添加到中LoggerFactory。这些提供者被称为LoggerFactory当日志记录方法时,将调用。
至于订单,第二和第三种方法由WebHostBuilder的UseStartup<TStartup>方法调用。
| 归档时间: |
|
| 查看次数: |
4770 次 |
| 最近记录: |