如何通过appsettings.json配置Serilog的Elasticsearch Sink?
Serilog Elasticsearch Sink配置不生效问题排查
先纠正一个基础错误
你写的http://localhost:5601是Kibana的控制台端口,Elasticsearch服务的默认端口是9200。如果你的ES没改端口,这个地址本身就错了;如果确实改了端口,接着看配置不生效的原因。
配置不生效的常见原因及解决办法
1. 参数名写错了(最可能)
不同版本的Serilog.Sinks.Elasticsearch包,配置参数名不一样:
- 新版本(v8及以上)用
NodeUris(大写开头,复数形式),不是Uri - 旧版本可能用
nodeUris或者serverUrl
把配置里的Uri换成对应参数名,比如:
"WriteTo": [ { "Name": "Elasticsearch", "Args": { "NodeUris": "http://localhost:9200" } }, { "Name": "Console" } ]
2. 代码里没加载配置文件
确保启动时正确读取appsettings.json并传给Serilog,少了下面这行就会忽略配置:
Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) // 必须加这行,从配置文件加载规则 .CreateLogger();
3. 配置层级不对
Serilog的配置要放在appsettings.json的根节点Serilog下面,结构得是这样:
{ "Serilog": { "MinimumLevel": "Information", "WriteTo": [ // 你的输出配置 ] } }
要是把Serilog配置嵌套在其他节点里,肯定读不到。
4. 依赖包版本不兼容
老版本的Sink包配置参数和现在不一样,建议更新到最新稳定版,再对应调整配置参数。
内容的提问来源于stack exchange,提问作者Ramayasket
相关产品推荐
相关产品推荐

