web-dev-qa-db-ja.com

ILoggerFactory vs serviceCollection.AddLogging vs WebHostBuilder.ConfigureLogging

Asp.net core 2.xアプリの一般的なログ要件があります。

  • 本番環境でアプリケーションの洞察を使用し、
  • 開発環境のコンソールおよびデバッグロガー
  • カテゴリーとログレベルに基づいていくつかのフィルターを設定します

これで、ロギングを構成するための少なくとも3つの異なるAPIが表示されます。

  1. WebHostBuilder.ConfigureLogging() in 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. Startup.ConfigureメソッドにILoggerFactoryを挿入します。

    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. startup.ConfigureServicesで:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddLogging(logging => 
        {
            logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
            logging.AddConsole();
            logging.AddDebug();
            logging.AddAzureWebAppDiagnostics();
        }
    }
    

それらの違いは何ですか?どちらを使用するか?

19
Liero

3番目は、 ConfigureServices のパブリックメソッドであるWebHostBuilderを使用します。そして、最初のものは、 ConfigureLoggingIHostBuilderの拡張メソッドの1つであるHostingHostBuilderExtensionsを使用します。

そして、両方ともIServiceCollectionの拡張メソッドAddLogging in LoggingServiceCollectionExtensionsMicrosoft.Extensions.Loggingパッケージの下で呼び出します。 AddLoggingメソッドは、最初に2つのシングルトンILoggerFactoryILogger<>、およびLoggerFilterOptionsの列挙型を追加しようとします。次に、logging(ILoggingBuilder)のアクションを実行し、最後に AddProvider メソッドを呼び出して、これらのプロバイダー(コンソール、Azure)によって実装されるログプロバイダーを追加し、呼び出します SetMinimumLevel を追加してLoggerFilterOptions

2番目の方法は、ログプロバイダーをLoggerFactoryに直接追加します。また、ロギングメソッドが呼び出されると、これらのプロバイダーはLoggerFactoryで呼び出されます。

注文に関しては、2番目と3番目のメソッドはWebHostBuilderUseStartup<TStartup> メソッドによって呼び出されます。

8
Feiyu Zhou