web-dev-qa-db-fra.com

ILoggerFactory vs serviceCollection.AddLogging vs WebHostBuilder.ConfigureLogging

J'ai une exigence de journalisation typique pour mon application asp.net core 2.x:

  • utiliser les connaissances des applications en production,
  • console et debug logger en développement env
  • configurer certains filtres en fonction de la catégorie et du niveau de journal

Maintenant, je vois au moins trois API différentes pour configurer la journalisation:

  1. 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();
    }
    
  2. 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));
        }
    
  3. 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?

19
Liero

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 IServiceCollectionAddLogging 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 WebHostBuilderUseStartup<TStartup> méthode.

8
Feiyu Zhou