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

appsettings.json配置Serilog子记录器过滤表达式不生效 无法写入shopify.log

Serilog按命名空间过滤日志未写入shopify.log的解决方案

排查&修改步骤

  • 依赖包检查
    确认你已经正确安装了Serilog.Settings.Configuration和对应版本的Serilog.Expressions包,配置读取时才能正确解析表达式过滤规则。
  • 修正过滤表达式写法
    Serilog.Expressions中引用内置属性建议加@前缀避免标识符冲突,同时如果需要忽略命名空间大小写匹配,可以统一转小写后判断,修改过滤表达式为:
"expression": "Contains(@SourceContext, 'Shopify')"

需要忽略大小写则改为:

"expression": "Contains(ToLowerCase(@SourceContext), 'shopify')"
  • 检查SourceContext是否正常生成
    只有使用泛型ILogger<T>注入的日志实例,才会自动将SourceContext属性设置为「对应类的完整命名空间+类名」;如果使用非泛型ILogger、直接new Serilog.Core.Logger实例未手动指定ForContext<>,则SourceContext属性为空,无法命中过滤规则。
  • 补全子Logger的最小级别配置
    如果全局最小日志级别或子Logger的最小级别高于你实际输出的日志级别,日志会被提前过滤,可在子Logger配置中显式指定匹配的最小级别,修改后的完整配置如下:
"WriteTo": [
  { "Name": "Console" },
  {
    "Name": "File",
    "Args": {
      "path": "Logs/system.log"
    }
  },
  {
    "Name": "Logger",
    "Args": {
      "configureLogger": {
        "MinimumLevel": {
          "Default": "Debug" // 改为和你全局配置一致的最小级别
        },
        "WriteTo": [
          {
            "Name": "File",
            "Args": {
              "path": "Logs/shopify.log"
            }
          }
        ],
        "Filter": [
          {
            "Name": "ByIncludingOnly",
            "Args": {
              "expression": "Contains(@SourceContext, 'Shopify')"
            }
          }
        ]
      }
    }
  }
]
  • 验证配置生效
    可以临时注释掉子Logger的Filter配置,如果此时shopify.log能正常写入所有日志,说明问题出在过滤规则匹配失败,再回头检查SourceContext的取值、表达式的大小写匹配问题即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:18:01