1. ホーム
  2. configuration

[解決済み] ASP.NET Coreの構成配列の設定を環境変数で上書きする方法

2023-06-24 12:10:50

質問

TL;DR

ASP.NET Coreアプリの中で appsettings.json という設定ファイルがあり、JSON 配列を使用して設定のコレクションを構成しています。

環境変数を使用して配列オブジェクトの1つの設定をオーバーライドするにはどうすればよいですか。

背景

私は セリログ をASP.NET Coreアプリケーションで使用しています。 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"
    }
  }
}

デプロイ時に、いくつかの設定を上書きしたいのですが、例えば 最小レベル やログ ファイルへのパスなどです。私は Azure App Service にデプロイしているので、Azure 管理ポータルを介してアプリの設定を使用します (これらは環境変数として実現されます)。

私は簡単に MinimumLevel という名前の環境変数を追加することで Serilog:MinimumLevel という名前の環境変数と、アプリケーション名 Serilog:Properties:Application .

設定を配列で指定する場合の書式は?

どのように解決するのですか?

デバッガで設定を見た後、私は答えを見つけました。

  • Serilog__WriteTo__0__Args__path (すべてのプラットフォーム)
  • Serilog:WriteTo:0:Args:path (Windows)
  • Serilog--WriteTo--0--Args--path (ソースはAzure Key Vaultから)

注意 の構成は、ASP.NET Coreの のドキュメントがこれをカバーするようになりました。

だから、配列のインデックス(ゼロベース)を名前のように使う必要があるんだ。

以下はデバッガのスクリーンショットです、また(おかげさまで Victor Hurdugaci をコメントで紹介) ユニットテスト は例を探すのに良い場所です。