我正在使用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,
...
}
}
}
]
}
答案 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
。
对您有用吗?