J'ai une exigence de journalisation typique pour mon application asp.net core 2.x:
Maintenant, je vois au moins trois API différentes pour configurer la journalisation:
WebHostBuilder.ConfigureLogging()
dans 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();
}
Injectez ILoggerFactory
à la méthode Startup.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));
}
dans Startup.ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(logging =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddAzureWebAppDiagnostics();
}
}
Quelle est la différence entre ceux-ci? Quand utiliser quoi?
Le troisième utilise ConfigureServices
qui est une méthode publique dans le WebHostBuilder
. Et le premier utilise ConfigureLogging
qui est l'une des méthodes d'extension de IHostBuilder
dans HostingHostBuilderExtensions
.
Et ils appellent tous les deux la méthode d'extension de IServiceCollection
AddLogging
dans LoggingServiceCollectionExtensions
sous Microsoft.Extensions.Logging
paquet. La méthode AddLogging
essaie d'abord d'ajouter deux singleton ILoggerFactory
et ILogger<>
et un énumérable de LoggerFilterOptions
. Effectuez ensuite l'action de journalisation (ILoggingBuilder
) qui appelle finalement la méthode AddProvider
pour ajouter les fournisseurs de journaux mis en œuvre par ces fournisseurs (console, Azure) et les appels SetMinimumLevel
pour ajouter LoggerFilterOptions
La deuxième méthode ajoute directement les fournisseurs de journaux à LoggerFactory
. Et ces fournisseurs sont appelés dans LoggerFactory
lorsque des méthodes de journalisation sont appelées.
Comme pour les commandes, les deuxième et troisième méthodes sont appelées par WebHostBuilder
UseStartup<TStartup>
méthode.