是从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。
关于如何让它像过去一样工作的任何建议?
对党来说,见解有点慢。有一个新的软件包支持日志记录构建器,例如
<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.9.0-beta3" />
如果没有它,您将需要使用过时的方式。
在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;
自定义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;