You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Azure App Service日志流中Serilog的LogWarning消息被标记为Information?

解决方案

这是因为Azure App Service日志流默认将控制台输出的所有日志标记为Information级别——Azure的日志收集器无法识别Serilog CompactJsonFormatter输出的@l级别字段,只会按自己的规则识别日志级别。

方法1:使用Azure专用的Serilog控制台格式化器

直接替换为AzureAppServiceConsoleFormatter,它会输出Azure能识别的级别前缀,确保日志流正确识别级别。需要确保已安装Serilog.Sinks.Console包,修改日志配置如下:

public static Serilog.ILogger ConfigureLogger()
{
    return new LoggerConfiguration()
        .MinimumLevel.Information()
        .Enrich.WithMachineName()
        .WriteTo.Console(new AzureAppServiceConsoleFormatter()) // 替换格式化器
        .WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day)
        .CreateLogger();
}

方法2:给CompactJsonFormatter添加级别前缀

如果想保留CompactJsonFormatter,可以在输出模板中添加Azure能识别的级别前缀,让日志流通过前缀判断级别:

.WriteTo.Console(
    outputTemplate: "[{Level:u3}] {Message:lj}{NewLine}{Exception}",
    formatter: new CompactJsonFormatter()
)

输出日志会带上[WRN]、[INF]这类前缀,Azure日志流就能正确识别级别,过滤Warning日志时即可正常匹配。

额外建议

可以在appsettings.json中添加Serilog专属配置,让日志级别管理更规范(不强制,但推荐):

"Serilog": {
  "MinimumLevel": {
    "Default": "Information",
    "Override": {
      "Microsoft.AspNetCore": "Warning"
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:50:14