Как получить доступ к конфигурации appsettings.json Serilog в коде? - PullRequest
1 голос
/ 25 июня 2019

Я использую MSSqlServer Sink Serilog, и все настройки описаны в 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 Ответ

1 голос
/ 26 июня 2019

Во-первых, синтаксис, используемый для определения конкретного значения конфигурации, выглядит следующим образом.

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 из переопределений вместо True из файла JSON.

Будет ли это работать для вас?

...