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

.NET应用中Elastic.Serilog.Sinks配置Serilog至Elasticsearch的问题

.NET中Serilog Elasticsearch接收器配置指南

1. 配置用户名和密码

给Elasticsearch接收器传入认证信息,可通过ConnectionSettings的BasicAuthentication方法实现,支持代码硬编码或配置文件两种方式:

代码配置示例

Log.Logger = new LoggerConfiguration()
    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://your-es-host:9200"))
    {
        ConnectionSettings = new ConnectionSettings(new Uri("http://your-es-host:9200"))
            .BasicAuthentication("your-username", "your-password"),
        // 其他接收器配置项
    })
    .CreateLogger();

配置文件(appsettings.json)示例

{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "Elasticsearch",
        "Args": {
          "nodeUris": "http://your-es-host:9200",
          "connectionSettings": {
            "basicAuthentication": "your-username:your-password"
          }
        }
      }
    ]
  }
}

2. 指定日志索引名

官方示例未提及是因为默认会使用serilog-{yyyy.MM.dd}格式的动态索引,你可以通过IndexFormat属性自定义索引命名规则:

代码配置指定索引

Log.Logger = new LoggerConfiguration()
    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://your-es-host:9200"))
    {
        IndexFormat = "my-app-logs-{yyyy.MM.dd}", // 自定义按日期滚动的索引名
        ConnectionSettings = new ConnectionSettings(new Uri("http://your-es-host:9200"))
            .BasicAuthentication("user", "pass"),
    })
    .CreateLogger();

配置文件指定索引

{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "Elasticsearch",
        "Args": {
          "nodeUris": "http://your-es-host:9200",
          "indexFormat": "my-app-logs-{yyyy.MM.dd}",
          "connectionSettings": {
            "basicAuthentication": "user:pass"
          }
        }
      }
    ]
  }
}

3. 索引名与数据流名的区别

两者不相同:

  • 索引是Elasticsearch存储数据的基础静态单元,需手动管理生命周期(如滚动、删除),适合归档历史数据。
  • 数据流是Elasticsearch 7.10+推出的特性,由多个后台索引组成的序列,自动处理索引滚动和生命周期,更适合持续写入的时序数据(如日志)。

如果要写入数据流,无需设置IndexFormat,而是指定DataStreamName,同时需启用API版本头:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://your-es-host:9200"))
    {
        DataStreamName = "my-app-logs", // 目标数据流名
        ConnectionSettings = new ConnectionSettings(new Uri("http://your-es-host:9200"))
            .BasicAuthentication("user", "pass")
            .EnableApiVersioningHeader(), // 写入数据流必须启用此配置
    })
    .CreateLogger();

注意:使用数据流前需确保Elasticsearch已创建对应数据流(可通过索引模板自动生成)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:59:51