如何在代码中访问AppSettings.json Serilog配置



我正在使用Serilog的MSSQLSERVER接收器,并且在AppSettings.json中描述了所有设置。我阅读了如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
    return WebHost.CreateDefaultBuilder(args)
        .UseSerilog((ctx, config) => { config.ReadFrom.Configuration(ctx.Configuration); })
        .UseStartup<Startup>();
}

然后,我想修改代码中appsettings.json文件中读取的一些条目。我很难弄清楚如何从文件中读取的配置。然后如何更改MSSQLSERVER汇的特定条目?

具体来说,假设我想从下面的文件中将columnOptionsSection中的disableTriggers更改为false。我该怎么做?

供参考,这是AppSettings的缩写部分。

"Serilog": {
  "WriteTo": [
    {
      "Name": "MSSqlServer",
      "Args": {
        "connectionString": "User ID=zzz;Password=yyy;...",
        "tableName": "LogMe",
        "autoCreateSqlTable": false,
        "batchPostingLimit": 1000,
        "period": "0.00:00:05",
        "columnOptionsSection": {
          "disableTriggers": true,
          "clusteredColumnstoreIndex": false,
          ...
        }
      }
    }
  ]
}

首先,用于针对特定配置值的语法如下。

configuration["Serilog:WriteTo:0:Args:columnOptionsSection:disableTriggers"]

现在让我们更改配置中的值。我认为您无法直接在配置实例上执行此操作,但是您可以提供新的配置层,从JSON文件中覆盖值。

var overrides = new Dictionary<string, string>
{
  { "Serilog:WriteTo:0:Args:columnOptionsSection:disableTriggers", "False" },
};
var configuration = new ConfigurationBuilder()
  .AddJsonFile("appsettings.json")
  .AddInMemoryCollection(overrides)
  .Build();

如果您要打印configuration["Serilog:WriteTo:0:Args:columnOptionsSection:disableTriggers"],则会从覆盖率获得False,而不是从JSON文件中获得True

这对您有用吗?

最新更新