正在从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和AzureAppServicesDiagnosticsSettings都被标记为过时。后者建议使用AzureBlobLoggerOptions。该指南指出,日志配置应该移动到这样的位置:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddLogging(builder => builder
.AddConsole()
.AddAzureWebAppDiagnostics());
...
}
然而,我不知道如何正确地将配置添加到ILoggingBuildler AND作为额外的奖励,AzureBlobLoggerOptions不允许自定义OutputTemplate。ILoggingBuilder中也缺少AddApplicationInsights。
关于如何让它像以前一样工作,有什么建议吗?
在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应用程序服务日志中看到消息;您还需要Nuget包Microsoft.Extensions.Logging.AzureAppService
和相应的using语句:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging.AzureAppServices;
Insights对派对来说有点慢。有一个新的包支持日志生成器,例如
<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.9.0-beta3" />
否则,你将需要使用过时的方式。
自定义OutputTemplate需要对Serilog的依赖,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;