如何使用环境变量覆盖ASP.NET Core配置数组设置

时间:2016-06-06 12:20:07

标签: configuration asp.net-core .net-core serilog

LT;DR

在ASP.NET Core应用程序中,我有一个appsettings.json配置文件,它使用JSON数组来配置一组设置。

如何使用环境变量覆盖其中一个数组对象的设置?

背景

我在ASP.NET核心应用程序中使用serilog并使用Serilog.Settings.Configuration,允许使用appsettings.json配置它。

配置如下:

{
  "Serilog": {
    "Using":  ["Serilog.Sinks.Literate"],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "File", "Args": { "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt" } }
    ],
    "Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"],
    "Properties": {
        "Application": "Sample"
    }
  }
}

部署后,我想覆盖一些设置,例如 MinimumLevel ,以及日志文件的路径。我首选的选择是通过环境变量执行此操作,因为我部署到Azure应用服务,因此我将通过Azure管理门户使用应用程序设置(这些设置被实现为环境变量)。

我可以通过添加名称为Serilog:MinimumLevel且应用程序名称为Serilog:Properties:Application的环境变量轻松设置 MinimumLevel

使用数组指定设置的格式是什么?

1 个答案:

答案 0 :(得分:29)

在调试器中查看配置后,我找到了答案。

Serilog:WriteTo:0:Args:path

所以我需要使用数组索引(基于零),就像它是一个名字一样。

在调试器的屏幕截图下面,如果有帮助的话,(感谢评论中的Victor Hurdugaci),unit tests是查找示例的好地方。

configuration in the debugger