c# - 如何在 .NET Core 运行时设置 Sentry 日志级别?

标签 c# .net-core sentry

我将 Sentry 与 .NET Core 一起使用,当前配置为

"SentryOptions": {
  "Dsn": "https://...",
  "LogLevel": "Error",
  "UseRequestFactory": false,
  "IsDisabled": false
},

ConfigureServices 中加载
serviceCollection.AddTransient<ISentryProvider, SentryProvider>();
serviceCollection.AddOptions().Configure<SentryOptions>(section);

有没有办法改LogLevel在运行时?我不想更改 appsettings.json 并重新部署只是为了切换配置。

最佳答案

这是一个 ASP.NET Core 应用程序还是只是使用通用主机的 .NET Core?您是否在使用 Sentry.AspNetCore一体化?该集成确实加载了 Sentry key 来自 appsettings.json自动,因此您无需为任何 Sentry 配置接触 DI 容器。它has docs here .
Sentry.AspNetCore取决于 Sentry.Extension.Logging ( docs here ) 所以它支持捕获所有 LogError s 及更高版本作为错误和 LogInformation并降低为面包屑(默认设置)。这意味着您可以使用 DI 来获取 IHubISentryClient在您的应用程序中的任何位置。

您的答案很可能是:具体设置 MinimumBreadcrumbLevel MinimumEventLevel 如果您在 appsettings.json 中更改它们的值,则不会重新加载.例如,您可以完全禁用 Sentry:

{
  "Logging": {
    "LogLevel": {
      "Sentry": "None", // Disables Sentry
    }
}

更多详情 ASP.NET docs .

由于这是建立在 Microsoft.Extensions.Logging 之上的集成包,您可以配置通用应用程序的日志级别,它应该会影响 Sentry 的记录器。他们没有自动重新加载更高级别的配置。重新加载配置是每个日志提供程序的工作。

如果您想尝试解决此问题的方法(未记录/不受支持):您可以转售 IOptions<SentryOptions>从容器(不要自己注册,SDK 已经这样做了)并在运行时更改 LogLevels。记录器实例保存对选项的引用并在运行时检查级别:

https://github.com/getsentry/sentry-dotnet/blob/f5f57545a1f17820d8beda3238ad76fc7ceac7ef/src/Sentry.Extensions.Logging/SentryLogger.cs#L40-L41

最后,请注意,如果您使用 Serilog,它会更改日志记录后端,在这种情况下,情况会有所不同。 Sentry 提供 Sentry.Serilog package也。

关于c# - 如何在 .NET Core 运行时设置 Sentry 日志级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62203028/

相关文章:

c# - Firebird EXECUTE BLOCK 从 c# 和 Flamerobin 中抛出错误 104

api - Docker:Docker运行后无法在浏览器上启动.Net Core 3.1 Web Api

.net-core - .net Core 3.0 预览版 2 - [406 : Not Acceptable]

c# - 由于与 ILogger 的引用冲突,具有依赖项注入(inject)的 Azure 函数未启动

javascript - Sentry/Raven 传递附加数据

C#语法糖类似于SQL的IN比较?

c# - Unity Hololens2 构建错误

c# - 重载 "base"构造函数或 "this"构造函数?

ruby - 如何测试是否正在使用某些特定的 Rack 中间件?

python-3.x - 使用 Python 3 的 Sentry