Docker-compose不读取环境变量将日志写入Elasticsearch

Kab*_*ali 1 elasticsearch serilog .net-core docker-compose

我正在设置 docker-compose.yml 文件来读取 docker 映像的环境变量。我的宿主项目中引用了 serilog.sinks.elasticsearch nuget 包。

如果我在 Visual Studio 中使用 appsettings.json 运行该项目,它会读取设置并将日志发送到 Elasticsearch,但不通过 docker-compose。

docker-compose.yml docker镜像的环境规范:

environment:
      - serilog:MinimumLevel=Verbose
      - serilog:using=Serilog.Sinks.Elasticsearch
      - serilog:WriteTo:Elasticsearch.nodeUris=http://localhost:9200
Run Code Online (Sandbox Code Playgroud)

本地 appsettings.json 有效。

"Serilog": {
        "MinimumLevel": "Debug",
        "WriteTo": [
            {
                "Name": "Elasticsearch",
                "Args": {
                    "nodeUris": "http://localhost:9200"
                }
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

docker-compose 中设置的MinimumLevel 受到尊重。

如何设置 docker-compose.yml 来读取接收器并将日志发送到elasticsearch数据库?

SKo*_*huk 5

尝试使用双下划线分隔符,例如 - Serilog__MinimumLevel=Verbose。双下划线是包的默认分隔符Microsoft.Extensions.Configuration.EnvironmentVariables(如果您没有在ConfigurationBuilder组合代码中覆盖它)。MSDN 环境变量配置提供程序参考

数组环境变量设置需要索引指定。

检查一下:

Serilog__Using__0=Serilog.Sinks.Elasticsearch
Serilog__WriteTo__0__Name=Elasticsearch
Serilog__WriteTo__0__Args__nodeUris=http://localhost:9200
Run Code Online (Sandbox Code Playgroud)