c# - Azure 应用服务中的自定义日志记录配置

标签 c# asp.net-mvc azure asp.net-core azure-web-app-service

我们正在尝试在 Azure 应用程序中配置过滤日志记录,我们已将应用程序配置为保存到 Blob 存储,并且我们可以很好地访问和查看这些日志记录。

我们遇到的问题是,目前 azure 会记录所有服务中的所有信息级别日志,因此我们正在获取路由、 Entity Framework 等的信息级别日志,而对于日常日志记录,我们真正需要的是我们的日志。 Controller 中的手动日志记录正在执行。

我一直以为我们可以像这样过滤 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.
  "DigitalAppraisalSystem": "Information",
  "Microsoft": "Warning",
  "Microsoft.Hosting.Lifetime": "Warning"
},
"Debug": { // Debug provider.
  "LogLevel": {
    "DigitalAppraisalSystem": "Information",
    "Microsoft": "Warning",
    "Microsoft.Hosting.Lifetime": "Warning"
  }
},
"AzureAppServicesFile": {
  
  "LogLevel": {
    "DigitalAppraisalSystem": "Information",
    "Microsoft": "Warning",
    "Microsoft.Hosting.Lifetime": "Warning"
  }
},
"AzureAppServicesBlob": {
  
  "LogLevel": {
    "DigitalAppraisalSystem": "Information",
    "Microsoft": "Warning",
    "Microsoft.Hosting.Lifetime": "Warning"
  }
},
"ApplicationInsights": {
  "LogLevel": {
    "DigitalAppraisalSystem": "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 存储中没有填充路由跟踪以及导致我们自己的用户操作可见性出现问题的其他所有内容。

关于c# - Azure 应用服务中的自定义日志记录配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73280275/

相关文章:

c# - 将多个复选框绑定(bind)到 ViewModel 中的单个属性

c# - Asp Mvc 如何将连接查询值分配给 viewmodel?

azure - 存储 blob 删除批量删除除两个具有相似名称的目录之外的所有 blob

c# - Entity Framework - 如何避免查询重新编译?

c# - 要使 XML 可序列化,从 ICollection 继承的类型必须具有 Add 的实现

带示例代码的 C# 分步教程

c# - 无法在用户管理器中访问 CreateAsync

javascript - Ajax 不使用 GET 将数据传递给方法

azure - 使用 Application Insights 监控数据库调用

c# - 重用 Azure 服务总线中的连接