Переопределить serilog appsettings.json в Docker Yaml - PullRequest
0 голосов
/ 03 октября 2018

Допустим, у меня есть следующая конфигурация Serilog в YAML:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.ApplicationInsights", 
        "Serilog.Sinks.Seq", "Serilog.Sinks.RollingFile", "Serilog.Sinks.Syslog" 
         ],
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning",
        "Microsoft.AspNetCore.Authentication": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} 
               {NewLine}Request ID: {RequestId}{NewLine}{Message:lj}{NewLine} 
                {Exception}"
        }
      }
      ,{
        "Name": "Syslog",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} 
                  {NewLine}Request ID: {RequestId}{NewLine}{Message:lj}{NewLine} 
                  {Exception}",
          "server": "logsN.papertrailapp.com",
          "port": "XXXXX",
          "application": "My Application",
          "facility": "Local6"
        }
      }
      ,{
        "Name": "RollingFile",
        "Args": {
          "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext} 
                {NewLine}Request ID: {RequestId}{NewLine}{Message:lj} 
                {NewLine}{Exception}",
          "pathFormat": "Logs\\log-{Date}.txt"
        }
      }
      ,{
        "Name": "ApplicationInsights"
      }
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": ""
        }
      }
    ],
    "Enrich": [ "FromLogContext" ],
    "Properties": {
      "Application": "My Application"
    }
  }

, которая является рабочей конфигурацией и работает при запуске в консоли и в докере.
Но я хочу иметь возможность переопределить некоторые значения, в основном, каталог.(pathFormat) для скользящего файла и сервера Serilog и порта (для papertrail) из файла yaml докера.Сейчас я делаю это как добавление переменных окружения, и после того, как я вызываю

var loggerConfiguration = new LoggerConfiguration()        .ReadFrom.Configuration(Configuration);

, я вызываю следующую вещь:

var appInsightsInstrumentationKey = Configuration.GetValue<string>("AppInsights_InstrumentationKey");
    if (!string.IsNullOrEmpty(appInsightsInstrumentationKey))
    {
        loggerConfiguration.WriteTo
          .ApplicationInsightsEvents(appInsightsInstrumentationKey);
    }

И, наконец, внутри docker.yaml (короткая версия, не все значения включены):

services:
    myapplication:
        environment:
            APPINSIGHTS_INSTRUMENTATIONKEY: "xxxxxx-xxxxxx-xxxxxx-xxxxxx"

Я пытался получить доступ к настройкам Serilog со следующей конфигурацией YAML:

services:
    myapplication:
        environment:
            Serilog:
                WriteTo:
                   -Name: "Syslog"
                   Args:
                      port:"xxxxx"

Однако я получаю ошибку: expected <block end> but found <block mapping start> (которая указывает на "-Name:" Syslog"" строка).

Как правильно сопоставить массив внутри YAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...