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

时间:2019-06-25 17:06:32

标签: c# .net-core serilog

我正在使用Serilog的MSSqlServer Sink,所有设置均在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接收器特定条目?

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

作为参考,这是appsettings.json的缩写部分,包括相关部分:

"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,
          ...
        }
      }
    }
  ]
}

1 个答案:

答案 0 :(得分:1)

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

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

对您有用吗?