Конфигурация Sentry в настройках приложения. json с Serilog in. Net Консольное приложение Core 3 - PullRequest
1 голос
/ 04 февраля 2020

Я использую следующий код для настройки Sentry с Serilog в моем. Net Базовом консольном приложении:

return new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Sentry(o =>
            {
                o.MinimumBreadcrumbLevel = LogEventLevel.Error;
                o.MinimumEventLevel = LogEventLevel.Error;
                o.Dsn = new Dsn(configuration.GetValue<string>("Sentry:Dsn"));
                o.Debug = false;
                o.AttachStacktrace = true;
                o.SendDefaultPii = true;
            })
            .CreateLogger();

Теперь я хотел бы переместить всю эту конфигурацию в appsettings.json файл, потому что мне нужно иметь другую конфигурацию в среде разработки и производства:

Пример:

"Sentry": {
    "Dsn": "<dsn>",
    "IncludeRequestPayload": true,
    "IncludeActivityData": true,
    "Debug": false,
    "DiagnosticsLevel": "Debug",
    "MinimumBreadcrumbLevel": "Debug",
    "MinimumEventLevel": "Warning"
  },

Можно ли оттуда прочитать всю конфигурацию?

обновление

Я пробую следующую конфигурацию в моем консольном приложении:

static void Main(string[] args)
    {
        using (SentrySdk.Init("<dsn>"))
        {
            // my code
        }

...

serviceCollection.AddSingleton<ILogger>(s =>
        {
            return new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .CreateLogger();
        });

appsettings:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Sentry" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning",
        "Sentry": "Information"
      }
    },
    "Enrich": [ "FromLogContext" ],
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "Sentry",
        "Args": {
          "Dsn": "<dsn>",
          "MinimumBreadcrumbLevel": "Info",
          "MinimumEventLevel": "Info",
          "AttachStackTrace": true, 
          "Debug": true,
          "DiagnosticsLevel": "Info"
        }
      }
    ]

Но SentrySdk.Init("<dsn>") нужен DSN, и он не будет читать его из настроек приложения!

Это так?

1 Ответ

1 голос
/ 05 февраля 2020

Serilog не знает о конфигурации ядра ASP. NET. По крайней мере, таким образом, чтобы привязать определенные c разделы объекта конфигурации к его расширениям.

Если вы используете ASP. NET Core, я предполагаю, что вы также используете Sentry.AspNetCore. Это вам советуют. В этом случае вам также необходимо передать конфигурацию.

NuGetTrends , который является проектом с открытым исходным кодом, использует Serilog с ASP. NET Core при использовании appsettings.json файл для настройки.

Вот Program.cs, настраивающий Sentry, Serilog и ASP. NET Core.

Обратите внимание, что конфигурация, как вы упомянули (с ключом Sentry) будет получен Sentry.AspNetCore, но не Sentry.Serilog (который отделен от ASP. NET Core).

Вы можете настроить последний, который является обычным приемником Serilog, например:

  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning",
        "Sentry": "Information"
      }
    },
    "WriteTo": [
       {
        "Name": "Sentry",
        "Args": {
          "MinimumBreadcrumbLevel": "Debug",
          "MinimumEventLevel": "Warning"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName" ]
  }

Я предлагаю оставить DSN и другие настройки, как вы сделали, на клавише Sentry, что приводит к инициализации ASP. NET Core. SDK, он также будет использовать интеграцию Serilog.

...