Как настроить ведение журнала 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>();