使用 .Net Core 3 控制台应用程序中的 Serilog appsettings.json 中的哨兵配置

Sentry configuration in appsettings.json with Serilog in .Net Core 3 Console App

我正在使用以下代码在我的 .Net Core 控制台应用程序中使用 Serilog 配置 Sentry

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();
        });

应用程序设置:

"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,它不会从应用程序设置中读取它!

是这样吗?

Serilog 不知道 ASP.NET 核心配置。至少以一种将配置对象的特定部分绑定到其扩展的方式。

如果您正在使用 ASP.NET Core,我假设您也在使用 Sentry.AspNetCore。建议你这样做。在这种情况下,您也需要将配置传递给它。

NuGetTrends 是一个开源项目,使用 Serilog 和 ASP.NET 核心,同时使用 appsettings.json 文件进行配置。

Here's the Program.cs setting up Sentry, Serilog and ASP.NET Core.

请注意,您提到的配置(以 Sentry 作为键)将由 Sentry.AspNetCore 获取,但不会由 Sentry.Serilog 获取(与 [=34= 分离) ]核心)。

您可以配置后者,这是一个普通的 Serilog 接收器,例如:

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

我建议在 Sentry 键上保留 DSN 和其他设置,这会使 ASP.NET Core 初始化 SDK,它还将利用 Serilog 集成.