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

Configuration 如何使用环境变量覆盖ASP.NET核心配置数组设置,configuration,asp.net-core,.net-core,serilog,Configuration,Asp.net Core,.net Core,Serilog,在ASP.NET核心应用程序中,我有一个appsettings.jsonconfig文件,它使用json数组来配置设置集合 如何使用环境变量覆盖其中一个数组对象的设置 背景 我在ASP.NET核心应用程序中使用,并使用,允许使用appsettings.json对其进行配置 配置如下: { “Serilog”:{ “使用”:[“Serilog.Sinks.Literate”], “最小级别”:“调试”, “书面形式”:[ {“Name”:“File”,“Args”:{“path”:“%TEMP%\

在ASP.NET核心应用程序中,我有一个
appsettings.json
config文件,它使用json数组来配置设置集合

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

背景

我在ASP.NET核心应用程序中使用,并使用,允许使用
appsettings.json
对其进行配置

配置如下:

{
“Serilog”:{
“使用”:[“Serilog.Sinks.Literate”],
“最小级别”:“调试”,
“书面形式”:[
{“Name”:“File”,“Args”:{“path”:“%TEMP%\\Logs\\serilog configuration sample.txt”}
],
“丰富”:[“FromLogContext”、“WithMachineName”、“WithThreadId”],
“财产”:{
“应用程序”:“示例”
}
}
}
部署时,我希望覆盖一些设置,例如MinimumLevel和日志文件的路径。我的首选选项是在部署到Azure应用程序服务时通过环境变量执行此操作,因此我将通过Azure管理门户使用应用程序设置(这些设置作为环境变量实现)

我可以通过添加一个名为:
Serilog:MinimumLevel
和应用程序名
Serilog:Properties:application
的环境变量轻松设置MinimumLevel


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

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

  • Serilog\uuuuu WriteTo\uuuuuu 0\uuuu Args\uuu path
    (所有平台)
  • Serilog:WriteTo:0:Args:path
    (Windows)
  • Serilog--WriteTo--0--Args--path
    (来源于Azure密钥库)
注意:本文档现在介绍了这一点

所以我需要使用数组索引(从零开始),就好像它是一个名称一样

这是调试器的屏幕截图,也是(感谢评论中的)查找示例的好地方


这些测试是另一个寻找例子的好地方:@VictorHurdugaci链接已经死了。这里有一个更新版本:@JamesSkimming啊,对了,我只检查了注释中的链接:)如果在unix系统中使用此环境变量,则必须将
替换为
\uuuuu
Serilog\uuu WriteTo\uuu 0\uu Args\uu path
现在的文档建议始终在:表单上使用uu表单,即使是在Windows上,我也有同样的问题——我无法忍受名称、冒号和数组索引(Serilog:WriteTo:0:Args:path)的魔力,几个月前我编写了一个新的配置提供程序来简化这种配置—@Dumitru“创建appsettings.envname.json并重复整个过程!!!Serilog json块再次使用MinimumLevel和pathFormat的新值-这可能是您能做的最糟糕的事情-这不是真的。您只需要指定更改的设置。