【问题标题】:Sentry configuration in appsettings.json with Serilog in .Net Core 3 Console Appappsettings.json 中的哨兵配置与 .Net Core 3 控制台应用程序中的 Serilog
【发布时间】:2020-05-20 06:56:36
【问题描述】:

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

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("&lt;dsn&gt;") 需要一个 DSN,它不会从 appsettings 中读取它!

是这样吗?

【问题讨论】:

  • 您是否使用 Microsoft.Extensions.Logging 和 Serilog 作为后端?我在回答中建议使用 ASP.NET Core,但它在后台使用 nuget.org/packages/Sentry.Extensions.Logging。您可以改用它。答案和代码示例仍应向您展示如何构建配置并将其传递给 Serilog。您可以使用 Sentry 扩展来登录以初始化 SDK。没有自动方法将 IConfiguration 传递给 Sentry 包,因为该包与 Microsoft.Extension* 没有依赖关系

标签: c# .net-core sentry


【解决方案1】:

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

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

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

Here's the Program.cs setting up Sentry, Serilog and 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" ]
  }

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

【讨论】:

  • 有趣点;但我的是一个控制台应用程序,而NuGetTrends 的配置与 API 项目不同。
  • 你使用主机配置吗?你有 appsettings.json 吗?您仍然可以在没有 ASP.NET Core 的情况下使用我提到的所有内容,只需使用 Microsoft.Extensions.Host:github.com/getsentry/symbol-collector/blob/master/src/… 我可以在更好地了解您的设置后更新答案
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2020-07-14
  • 2016-11-02
  • 1970-01-01
  • 2020-02-08
  • 2016-12-07
  • 2018-09-12
  • 1970-01-01
相关资源
最近更新 更多