Функция Azure: Appsetting.json не работает с Serilog.Sinks.Sumologic

Мы пытаемся внедрить ведение журнала с помощью Serilog.Sinks.SumoLogic(1.0.1) в приложения-функции Azure (без ядра .NET). Ниже приведен код и appsetting.json, которые мы используем.

Код:

var configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json",optional: false, reloadOnChange: true)
        .Build();

var loggerFromConfig = new LoggerConfiguration()
               .ReadFrom.Configuration(configuration)
               .CreateLogger();

Appsettings.json:

{"Serilog": {
 "MinimumLevel": {
  "Default": "Information",
  "Override": {
    "System": "Warning",
    "Microsoft": "Warning"
    }
  },
  "WriteTo": [
  {
    "Name": "SumoLogic",
    "Args": {
      "endpointUrl": "https:"
      }
  }
  ]      
 }
}

С помощью вышеуказанной настройки приложения мы не можем связать сумологический приемник с объектом loggerFromConfig и _sinks = {Serilog.Core.ILogEventSink[0]}, который показывает, что приемник не настроен.

Если мы попробуем тот же код с образцом проекта с зависимостью Microsoft.NET.Core.Apps, он будет работать нормально.

Похоже, что appsettings.json поддерживается только основными приложениями .NET.

Пожалуйста, предложите, как написать журнал, используя Serilog с appsettings.json (без основных приложений .NET).


person Harish kumar    schedule 13.07.2017    source источник
comment
Любое обновление? Если вы считаете, что мой ответ полезен / полезен. Пожалуйста, отметьте его как ответ, чтобы другие люди могли извлечь из него пользу.   -  person Brando Zhang    schedule 20.07.2017


Ответы (1)


Насколько я знаю, метод ReadFrom.Configuration используется для получения настроек из appsettings.json в основном проекте .net.

Поскольку для метода ReadFrom.Configuration требуется объект IConfiguration. Если вы хотите использовать ConfigurationBuilder, вам необходимо установить пакет Microsoft.Extensions.Configuration из пакета Nuget.

Если вы устанавливаете этот пакет Nuget, вы можете использовать класс ConfigurationBuilder. Но он также установит пакет Microsoft.NETCore.Platforms.

На мой взгляд, правильный способ использования Serilog в приложениях .net — использовать метод LoggerConfiguration().WriteTo.SumoLogic, подобный этому.

   var logger = new LoggerConfiguration().WriteTo.SumoLogic(url,
                                sourceName: "CustomSourceName",
                                sourceCategory: "CustomSourceCategory",
                                restrictedToMinimumLevel: LogEventLevel.Debug,
                                batchSizeLimit: 20,
                                period: TimeSpan.FromSeconds(1),
                                textFormatter: new RawFormatter())

Более подробную информацию вы можете найти в этом коды.

Поскольку метод ReadFrom.Configuration также считывает параметр из файла appsettings.json, а затем использует эти параметры для создания объекта LoggerConfiguration, я предлагаю вам напрямую использовать метод LoggerConfiguration().WriteTo.SumoLogic.

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

person Brando Zhang    schedule 13.07.2017