Как переопределить настройки массива конфигурации ASP.NET Core с использованием переменных среды

LT; DR

В приложении ASP.NET Core у меня есть файл конфигурации appsettings.json, в котором для настройки набора параметров используется массив JSON.

Как переопределить настройку одного из объектов массива с помощью переменных среды?

Фон

Я использую serilog в основном приложении ASP.NET и использую 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 (они реализованы как переменные среды).

Я легко могу установить MinimumLevel, добавив переменную среды с именем: Serilog:MinimumLevel и именем приложения Serilog:Properties:Application.

В каком формате указывается настройка с помощью массива?

Ответ 1

Посмотрев конфигурацию в отладчике, я нашел ответ.

Serilog:WriteTo:0:Args:path

Поэтому мне нужно использовать индекс массива (с нуля), как если бы это было имя.

Ниже снимка экрана отладчика на случай, если он поможет, также (благодаря Виктору Хурдугачи в комментариях) модульные тесты - это хорошее место для поиска примеров.

configuration in the debugger