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

如何在appsettings中配置Serilog实现多Sink及日志级别覆盖?

Serilog多Sink差异化日志过滤配置

以下是在appsettings.json中配置Serilog,实现Console输出所有日志、AzureTableStorage按来源和级别过滤日志的完整示例:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.AzureTableStorage" ],
    "MinimumLevel": "Verbose",
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "AzureTableStorage",
        "Args": {
          "connectionString": "你的Azure存储账户连接字符串",
          "tableName": "ApplicationLogs"
        },
        "Filter": [
          {
            "Name": "ByIncludingOnly",
            "Args": {
              "expression": "(SourceContext like '你的应用命名空间%' and @Level >= 'Information') or (@Level >= 'Warning')"
            }
          }
        ]
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
  }
}

关键配置说明

  1. 全局最低级别
    设置为Verbose是为了让Serilog捕获所有级别的日志,后续由各个Sink的过滤规则决定最终输出内容,避免全局级别过高导致低级别日志被提前丢弃。

  2. Console Sink
    无需额外过滤配置,直接输出所有符合全局最低级别的日志,满足“记录所有日志”的需求。

  3. AzureTableStorage Sink过滤规则
    通过Filter节点的ByIncludingOnly表达式实现差异化过滤:

    • 当日志来源是你的应用(通过SourceContext匹配应用命名空间前缀,比如YourApp.Project.*),且级别为INFO及以上时,写入Azure表存储;
    • 无论日志来源,只要级别为WARNING及以上,一律写入Azure表存储。

注意事项

  • 替换你的Azure存储账户连接字符串为实际的Azure存储账户连接字符串;
  • 替换你的应用命名空间为项目中日志记录器对应的命名空间前缀(通常是项目根命名空间,比如创建Logger时使用Log.ForContext<HomeController>(),此时SourceContext就是YourApp.Controllers.HomeController);
  • 确保已安装必要的NuGet包:Serilog.Sinks.Console、Serilog.Sinks.AzureTableStorage、Serilog.Settings.Configuration。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:04:50