asp net core docker serilog配置

AD8*_*AD8 1 docker asp.net-core

我有一个 dot net core 3.1 应用程序,配置为在 docker 容器中运行。虽然我已经设法使用 docker-e标志更新简单的 appsettings 配置,但当涉及到有点复杂的配置时,例如 serilog 配置,我仍然感到困惑。

应用程序设置文件:

{
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Host=172.18.101.65;Port=5432;Username=postgres;Password=pgadmin;Database=identityserver;"
  },
  "Serilog": {
    "Using": [],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcesssId", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "D:\\Logs\\IDSvr\\Log-.txt",
          "outputTemplate": "{Timestamp:G} {Message}{NewLine:1}{Exception:1}",
          "rollingInterval": "Day",
          "shared": true
        }
      },
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://localhost:8081"
        }
      }
    ]
  },
  .
  .
  .
  }
Run Code Online (Sandbox Code Playgroud)

我可以使用标志更新连接字符串-e ConnectionStrings__DefaultConnection="...",我不确定如何更新 的Serilog配置WriteTo部分。

Hen*_*ous 6

WriteTo是一个复杂的对象array。因此,您必须指定要覆盖的索引。假设您想覆盖:

"Serilog": {
  "WriteTo": [
    {
      "Name": "Console" // this value
    },
    ...
Run Code Online (Sandbox Code Playgroud)

-e Serilog__WriteTo__0__Name您可以根据数组中的索引 0选择键。然后只需将您想要的值传递给它,例如-e Serilog__WriteTo__0__Name=something.

要读取 .NET Core 中的确切值Configuration,请Configuration["Serilog:WriteTo:0:Name"]在启动管道中使用。