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

Serilog.Sinks.EventLog过滤失效问题咨询及修复方法

Serilog.Sinks.EventLog 过滤失效问题解决

结论:EventLog Sink 支持过滤

Serilog.Sinks.EventLog本身不直接内置过滤能力,但可以通过Serilog的sink级嵌套Logger配合Serilog.Filters.Expressions实现精准过滤,你的配置问题出在结构和表达式细节上。

修复步骤

1. 修正配置结构

Serilog的sink级过滤不能直接在EventLog节点下配置Filter,需要用WriteTo.Logger将EventLog sink包裹,把过滤规则放在嵌套的Logger配置中。

替换你原有的EventLog sink配置为以下内容:

{
  "Name": "Logger",
  "Args": {
    "configureLogger": {
      "Filter": [
        {
          "Name": "ByIncludingOnly",
          "Args": {
            "expression": "Contains(RenderedMessage, 'EventLog:')"
          }
        }
      ],
      "WriteTo": [
        {
          "Name": "EventLog",
          "Args": {
            "source": "WebUI Application",
            "logName": "Application",
            "manageEventSource": true,
            "restrictedToMinimumLevel": "Verbose",
            "levelSwitch": "$controlSwitch"
          }
        }
      ]
    }
  }
}

2. 修正过滤表达式

你原表达式中使用的@Message指向的是原始消息模板(未替换占位符的文本),如果要匹配渲染后的最终日志内容,需要改用RenderedMessage属性。

如果是要匹配自定义日志属性(比如你有一个名为Category的属性),表达式可以写为:

Category = 'EventLog'

3. 确认依赖包有效性

你已安装的SerilogExpressions v4.0.0是正确的依赖,它负责解析过滤表达式,无需额外安装其他包。

原理说明

Serilog的顶层配置中,WriteTo下的sink本身不支持直接挂过滤规则,必须通过嵌套Logger节点来实现:外层Logger先执行过滤逻辑,仅将符合条件的日志传递给内层的EventLog sink,从而实现sink级别的日志过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:04:59