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

无法通过配置文件为Serilog配置自定义sink,.NET 5与.NET Core 3.1下均失效

问题根因

Serilog 配置系统通过 WriteTo 节点的 Name 属性匹配的是 LoggerSinkConfiguration 的扩展方法名,而非直接匹配 ILogEventSink 实现类的类名,你目前只实现了Sink类,缺少对应的注册扩展方法,同时存在配置节点拼写错误的问题。

修复步骤

1. 新增自定义Sink的注册扩展方法

在你的项目中新增静态类,编写扩展方法:

namespace SampleApp // 确保命名空间和Sink类一致,或者可以全局访问
{
    public static class SerilogCounterSinkExtensions
    {
        public static LoggerConfiguration SerilogCounter(
            this LoggerSinkConfiguration loggerConfiguration,
            LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
            ILogEventFilter filter = null)
        {
            // 直接返回你自定义Sink的实例
            return loggerConfiguration.Sink(new SerilogCounterSink(), restrictedToMinimumLevel, filter);
        }
    }
}

2. 修正appsettings.json配置

修正两处错误:

  • WriteTo 节点的 Name 填扩展方法名 SerilogCounter
  • 把拼写错误的 MinimalLevel 改为官方要求的 MinimumLevel
    修正后的配置如下:
"Serilog": {
    "Using": [ "SampleApp" ],
    "WriteTo": [
      { "Name": "SerilogCounter" },
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": { "path": "Logs/log.txt" }
      }
    ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "System": "Warning",
        "Microsoft": "Information"
      }
    }
}

3. 可选优化

你代码中已经手动调用了 .WriteTo.Console(),和配置里的Console注册重复,会导致单条日志输出两次,可以删除代码里的手动Console注册,统一由配置管理所有Sink。

修改后重新运行,即可通过配置触发SerilogCounterSink.Emit方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:24:03