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

为ElasticsearchSink配置failureSink报错的解决方法

修复Serilog ElasticsearchSink配置FileSink作为failureSink的实例化错误

错误原因

你遇到的Cannot create instance of type 'Serilog.Core.ILogEventSink'错误,是因为直接在failureSink中指定FileSink的具体类型不符合Serilog配置系统的解析规则。Serilog配置依赖sink的注册工厂方法,而非直接实例化sink类,FileSink的构造参数无法被配置系统自动解析。

修复步骤

  1. 确认依赖包:确保项目已安装Serilog.Sinks.File NuGet包(未安装的话直接通过NuGet包管理器安装)。
  2. 调整配置结构:
    • 在Serilog.Using数组中添加Serilog.Sinks.File,让配置系统能找到FileSink的注册逻辑;
    • 将failureSink的配置从指定type改为使用Name+Args的结构,和顶级WriteTo的配置方式一致。

修改后的完整配置

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Elasticsearch", "Serilog.Sinks.File"],
    "MinimumLevel": {
        "Default": "Error",
        "Override": {
            "Microsoft.Hosting.Lifetime": "Information",
            "Microsoft.AspNetCore": "Warning",
            "Microsoft": "Error",
            "System": "Error",
            "Quartz": "Error",
            "GraphQL": "Warning",
            "Hateoas": "Warning",
            "MassTransit": "Information"
        }
    },
    "WriteTo": [
        {
            "Name": "Elasticsearch",
            "Args": {
                "nodeUris": "http://17.172.25.115:9200",
                "indexFormat": "logstash",
                "templateName": "logstash-template",
                "emitEventFailure":  "WriteToFailureSink, WriteToSelfLog, RaiseCallback",
                "failureSink": {
                    "Name": "File",
                    "Args": {
                        "path": "failures.txt",
                        "fileSizeLimitBytes":  null 
                    }
                }
            }
        },
        {
            "Name": "Console",
            "Args": {
                "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
                "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
            }
        }
    ],
    "Enrich": [ "FromLogContext" ],
    "Properties": {
        "ApplicationName": "AselsanSatComPAMAStatic"
    }
}

原理说明

Serilog配置系统通过Name字段匹配对应的sink扩展方法(比如Name: "File"对应WriteTo.File()),自动处理sink的实例化和参数注入,避免了直接构造FileSink类时的参数不兼容问题,同时保证配置结构的一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:47:11