ILoggerFactory против serviceCollection.AddLogging против WebHostBuilder.ConfigureLogging - PullRequest
0 голосов
/ 07 июня 2018

У меня есть типичные требования к ведению журналов для моего приложения asp.net core 2.x:

  • использование понимания приложений в производственной среде,
  • консоль и отладчик в средах разработки env
  • настройка некоторых фильтров на основе категории и уровня журнала

Теперь я вижу как минимум три различных API для настройки ведения журнала:

  1. WebHostBuilder.ConfigureLogging() inProgram.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. Ввести ILoggerFactory в метод 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. в Startup.ConfigureServices:

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

В чем разница между ними?Когда использовать какой?

1 Ответ

0 голосов
/ 08 июня 2018

Третий использует ConfigureServices, который является публичным методом в WebHostBuilder.И первый использует ConfigureLogging, который является одним из методов расширения IHostBuilder в HostingHostBuilderExtensions.

И оба они вызывают метод расширения IServiceCollection AddLogging в LoggingServiceCollectionExtensions в пакете Microsoft.Extensions.Logging.Метод AddLogging сначала попытается добавить два синглтона ILoggerFactory и ILogger<> и перечислимое значение LoggerFilterOptions.Затем выполните действие для ведения журнала (ILoggingBuilder), которое, наконец, вызывает метод AddProvider, чтобы добавить поставщиков журналов, реализованных этими поставщиками (Консоль, Azure), и вызывает SetMinimumLevel дляadd LoggerFilterOptions

Второй метод напрямую добавляет поставщиков журналов в LoggerFactory.И эти провайдеры вызываются в LoggerFactory при вызове методов ведения журнала.

Что касается заказов, то второй и третий методы вызываются методом WebHostBuilder 'UseStartup<TStartup>.

...