我们正在尝试在 Azure 应用程序中配置过滤日志记录,我们已将应用程序配置为保存到 blob 存储,并且我们可以很好地访问和查看这些日志记录。
我们遇到的问题是,目前 azure 会记录所有服务中的所有信息级别日志,因此我们正在获取路由、实体框架等的信息级别日志,而对于日常日志记录,我们真正需要的是手动日志记录控制器正在做的事情。
我一直以为我们可以像这样过滤 appsettings.json 中的日志:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "None"
}
但是这个在 Azure 中被忽略,所有级别的日志都会继续,在 appsettings.development.json 中尝试相同的设置并得到相同的结果。
我还在文档中读到,我们可以以编程方式向 Azure Application Insights 日志添加过滤器,但这似乎也不起作用(还在环境变量中设置了应用程序见解连接字符串)>
builder.Services.AddApplicationInsightsTelemetry();
builder.Host.ConfigureLogging(log =>
{
log.ClearProviders();
log.AddFilter<ApplicationInsightsLoggerProvider>("MyAppName", LogLevel.Information);
log.AddFilter<ApplicationInsightsLoggerProvider>("Microsoft", LogLevel.Error);
log.AddAzureWebAppDiagnostics();
});
这也没有提供我们所希望的解决方案。有没有具体的配置方法?预先感谢!
现在解决了这个问题,感谢所有添加评论的人。对于遇到此问题的其他人,您必须确保您的 appsettings.json 包含完整范围的日志记录配置文件。您可能认为默认 LogLevel 适用于所有应用程序,但事实并非如此。
"Logging": {
"LogLevel": { // No provider, LogLevel applies to all the enabled providers.
"ProjectName": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Warning"
},
"Debug": { // Debug provider.
"LogLevel": {
"ProjectName": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Warning"
}
},
"AzureAppServicesFile": {
"LogLevel": {
"ProjectName": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Warning"
}
},
"AzureAppServicesBlob": {
"LogLevel": {
"ProjectName": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Warning"
}
},
"ApplicationInsights": {
"LogLevel": {
"ProjectName": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Warning"
}
}
除此之外,Program.cs 还需要配置这些日志,具体来说:
builder.Host.ConfigureLogging((hostingContext, log) =>
{
log.ClearProviders();
log.AddAzureWebAppDiagnostics();
log.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
log.AddConsole();
log.AddDebug();
log.AddEventSourceLogger();
});
现在 Azure 中的日志过滤正在按预期工作,并且 Blob 存储中没有填充路由跟踪以及导致我们自己的用户操作可见性出现问题的所有其他内容。