Функция Azure не может инициализировать Serilog Sink при использовании appsettings.json - PullRequest
5 голосов
/ 06 марта 2019

Я создал простую функцию Azure с намерением использовать Serililog для входа в хранилище BLOB-объектов Azure.

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

Это работает:

Log.Logger = new LoggerConfiguration()
   .WriteTo.AzureBlobStorage(
           "STORAGEACCOUNT CONNECTION STRING", // <-- inline config
           LogEventLevel.Information,
           null,
           "{yyyy}/{MM}/{dd}/MyLogFile.txt")
   .CreateLogger();

enter image description here

Проблема в том, что я хотел бы настроить все это через appsettings.json, но когда я пытаюсь это сделать (как локально в эмуляторе, так и в облаке), он не может связать настройки приемника, и в результате его не удается войти в хранилище блога.

Если я отлаживаюсь, я вижу, что значения конфигурации загружаются как положено в configuration объект , но они не применяются к конфигурации ведения журнала.

Это не работает:

Log.Logger = new LoggerConfiguration()
   .ReadFrom.Configuration(configuration)
   .CreateLogger();

appsettings.json в этом фрагменте:

{

  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information"
      }
    },
    "WriteTo": [{
        "Name": "AzureBlobStorage",
        "Args": {
          "connectionString": " --- REPLACE WITH STORAGEACCOUNT BLOB CONNECTION STRING --- ",
          "formatter": "Serilog.Formatting.Compact.RenderedCompactJsonFormatter, Serilog.Formatting.Compact",
          "storageFileName": "{yyyy}/{MM}/{dd}/MyLogFile.txt",
          "retainedFileCountLimit": 31
        }
      }

    ],
    "Properties": {
      "Application": "int-test-logging",
      "Environment": "int"
    }
  }

}

enter image description here

Я не уверен, что делаю неправильно, но любая помощь будет признательна. Следующий репозиторий github содержит код для реализации вышеупомянутого (оба подхода) и воспроизводит это поведение. https://github.com/oneiltomlinson/AzureFunctionsLogging

1 Ответ

6 голосов
/ 08 марта 2019

Просто добавьте

    "Using": [ "Serilog.Sinks.AzureBlobStorage" ] //under Serilog Config

и это будет работать!

Рабочая конфигурация

{
    "Serilog": {
        "Using": [
            "Serilog.Sinks.AzureBlobStorage"
        ],
        "MinimumLevel": {
            "Default": "Information",
            "Override": {
                "Microsoft": "Information"
            }
        },
        "WriteTo": [
            {
                "Name": "AzureBlobStorage",
                "Args": {
                    "connectionString": " --- REPLACE WITH STORAGEACCOUNT BLOB CONNECTION STRING --- ",
                    "formatter": "Serilog.Formatting.Compact.RenderedCompactJsonFormatter, Serilog.Formatting.Compact",
                    "storageFileName": "{yyyy}/{MM}/{dd}/MyLogFile.txt",
                    "retainedFileCountLimit": 31
                }
            }
        ],
        "Properties": {
            "Application": "int-test-logging",
            "Environment": "int"
        }
    }
}
...