【问题标题】:asp net core docker serilog configurationasp net core docker serilog 配置
【发布时间】:2020-05-25 20:45:41
【问题描述】:

我有一个配置为在 docker 容器中运行的 dot net core 3.1 应用程序。 虽然我已经设法使用 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"
        }
      }
    ]
  },
  .
  .
  .
  }

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

【问题讨论】:

    标签: docker asp.net-core


    【解决方案1】:

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

    "Serilog": {
      "WriteTo": [
        {
          "Name": "Console" // this value
        },
        ...
    

    由于数组中的索引为 0,您可以通过 -e Serilog__WriteTo__0__Name 选择键。然后给它传递一个你想要的值,比如-e Serilog__WriteTo__0__Name=something

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

    【讨论】:

    • 完美!正是我需要的。
    • 应该是更优雅的方式。
    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2021-10-16
    相关资源
    最近更新 更多