我将 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 来获取 IHub
或 ISentryClient
在您的应用程序中的任何位置。
您的答案很可能是:具体设置 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/