Как настроить ведение журнала Azure после обновления до ASP.NET Core 2.2

Выполняется обновление с ASP.NET Core 2.1 до ASP.NET Core 2.2 и используется официальное руководство по документации.

Возникла проблема с записью новой конфигурации ведения журнала в Startup.cs. Конкретно проблемы с обработкой AzureWebAppDiagnostics.

Старая конфигурация состояла из следующей конфигурации:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...
    loggerFactory.AddApplicationInsights(app.ApplicationServices);
    loggerFactory.AddAzureWebAppDiagnostics(
        new AzureAppServicesDiagnosticsSettings
        {
            OutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss zzz} [{Level}] {RequestId}-{SourceContext}: {Message}{NewLine}{Exception}"
        }
    );
}

И AddAzureWebAppDiagnostics, и AzureAppServicesDiganosticsSettings помечены как устаревшие. Позднее вместо этого предлагается использовать AzureBlobLoggerOptions. В руководстве говорится, что конфигурацию ведения журнала следует переместить примерно так:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddLogging(builder => builder
        .AddConsole()
        .AddAzureWebAppDiagnostics());
    ...
}

Однако я не имею ни малейшего понятия о том, как правильно добавить конфигурацию в ILoggingBuildler И в качестве дополнительного бонуса AzureBlobLoggerOptions не допускает использование пользовательского шаблона OutputTemplate. AddApplicationInsights также отсутствует в ILoggingBuilder.

Любые предложения о том, как заставить это работать, как это было раньше?

2 ответа

В 2.2 я получил это, разделив конфигурацию между Program.cs и Startup.cs:

Добавьте это в CreateWebHostBuilder в Program.cs:

  .ConfigureLogging((hostingContext, logging) =>
    {
        logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
        logging.AddConsole();
        logging.AddDebug();
        logging.AddEventSourceLogger();
        logging.AddAzureWebAppDiagnostics();
    })

Добавьте это к ConfigureServices в Startup.cs:

services.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
});

Этого было достаточно, чтобы я начал видеть сообщения в журнале службы приложений Azure; вам нужен пакет Nuget Microsoft.Extensions.Logging.AzureAppService и соответствующие операторы использования также:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging.AzureAppServices;

Понимание немного медленно для вечеринки. Существует новый пакет с поддержкой сборщика журналов, например

<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.9.0-beta3" />

Без этого вам нужно будет использовать устаревший способ.

Для пользовательского OutputTemplate требовалась зависимость от Serilog, который был удален для 2.2, поэтому он отсутствует в классах параметров файла или BLOB-объектов.

Для 2.2 рекомендуется настраивать ведение журнала в Program.cs, а не в Startup.cs; Вот пример использования AddAzureWebAppDiagnostics и классов параметров:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
        .ConfigureServices(serviceCollection => serviceCollection
                .Configure<AzureFileLoggerOptions>(options => {
                    options.FileName = "azure-diagnostics-";
                    options.FileSizeLimit = 50 * 1024;
                    options.RetainedFileCountLimit = 5;
                }).Configure<AzureBlobLoggerOptions>(options => {
                    options.BlobName = "log.txt";
                }))
        .UseStartup<Startup>();
Другие вопросы по тегам