如何在升级到ASP.NET Core 2.2后配置Azure日志记录

问题描述 投票:6回答:3

是从ASP.NET Core 2.1升级到ASP.NET Core 2.2还是跟随the official documentation guide

在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。 ILoggingBuilder也缺少AddApplicationInsights。

关于如何让它像过去一样工作的任何建议?

c# azure-diagnostics .net-core-logging
3个回答
2
投票

对党来说,见解有点慢。有一个新的软件包支持日志记录构建器,例如

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

如果没有它,您将需要使用过时的方式。


1
投票

在2.2中,我通过在Program.cs和Startup.cs之间拆分配置来实现这一点:

将它添加到Program.cs中的CreateWebHostBuilder:

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

将其添加到Startup.cs中的ConfigureServices:

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

这足以让我开始在Azure App Service日志中看到消息;你还需要Nuget包Microsoft.Extensions.Logging.AzureAppService和相应的using语句:

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

0
投票

自定义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>();

这需要NuGet包Microsoft.Extensions.Logging.AzureAppServices和以下使用语句:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging.AzureAppServices;
using Microsoft.Extensions.Logging;
© www.soinside.com 2019 - 2024. All rights reserved.