You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Azure App Service中如何覆盖Microsoft.AspNetCore的Serilog日志级别?

问题分析与解决方法

你操作中的错误点

  • 环境变量目标配置错误:你尝试的多数环境变量针对的是ApplicationInsightsLogging节点,而非Serilog的MinimumLevel.Override配置。Serilog的日志级别覆盖需要直接针对Serilog__MinimumLevel__Override层级设置。
  • 环境变量格式问题:正确的Serilog覆盖配置环境变量应该是Serilog__MinimumLevel__Override__Microsoft.AspNetCore=Warning,而你尝试的Serilog__MinimumLevel__Override__Microsoft.AspNetCore.HttpLogging仅覆盖了子命名空间,未对主Microsoft.AspNetCore命名空间生效;同时无需将命名空间中的点替换为下划线,直接保留即可。

除Telemetry处理器外的解决方法

方法1:正确设置环境变量

在Azure App Service的「配置-应用设置」中添加以下环境变量:

Serilog__MinimumLevel__Override__Microsoft.AspNetCore=Warning

如果需要覆盖更具体的子命名空间(如Microsoft.AspNetCore.Mvc),可追加:

Serilog__MinimumLevel__Override__Microsoft.AspNetCore.Mvc=Warning

方法2:在Serilog配置中添加过滤规则

修改appsettings.json中的Serilog配置,添加Filter规则直接排除指定命名空间的低级别日志:

"Serilog": {
  "Using": [
    "Serilog.Sinks.ApplicationInsights"
  ],
  "MinimumLevel": {
    "Default": "Warning",
    "Override": {
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "Filter": [
    {
      "Name": "ByExcluding",
      "Args": {
        "expression": "StartsWith(SourceContext, 'Microsoft.AspNetCore') and Level = 'Information'"
      }
    }
  ]
}

该规则会直接排除所有Microsoft.AspNetCore命名空间下的Information级别日志。

方法3:检查Serilog初始化逻辑

确保在Program.cs中正确从配置加载Serilog设置,示例代码:

var builder = WebApplication.CreateBuilder(args);

// 加载Serilog配置
builder.Host.UseSerilog((context, configuration) =>
    configuration.ReadFrom.Configuration(context.Configuration));

// 其他服务配置...

var app = builder.Build();
// 后续中间件配置...

若代码中存在手动设置MinimumLevel的硬编码逻辑,会覆盖配置文件和环境变量的设置,需移除这类代码。

方法4:配置ApplicationInsights Sink的日志级别限制

在Serilog的ApplicationInsights Sink配置中,添加restrictedToMinimumLevel参数,限制发送到AI的最低日志级别:

"Serilog": {
  "Using": [
    "Serilog.Sinks.ApplicationInsights"
  ],
  "MinimumLevel": {
    "Default": "Warning",
    "Override": {
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "WriteTo": [
    {
      "Name": "ApplicationInsights",
      "Args": {
        "restrictedToMinimumLevel": "Warning",
        "telemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
      }
    }
  ]
}

这样即使有低级别日志生成,也不会被发送到ApplicationInsights。

内容的提问来源于stack exchange,提问作者iBobb

火山引擎 最新活动