.NET Core版本中,Sentry如何实现高效异常监控?

2026-05-19 13:181阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1683个文字,预计阅读时间需要7分钟。

.NET Core版本中,Sentry如何实现高效异常监控?

简介:针对.NET Core的两种集成方式:基于Microsoft.Extensions.Logging的集成方式:Sentry.Extensions.Logging;基于asp.net core框架的集成方式:Sentry.AspNetCore。源码:https://github.com/getsentry/sentry-dotnet 官网:https://www.sentry.io/

简介 针对.NET Core的两种集成方式

基于 Microsoft.Extensions.Logging 的集成方式:Sentry.Extensions.Logging
基于 asp.net core 框架的集成方式:Sentry.AspNetCore

源码:github.com/getsentry/sentry-dotnet
官方文档:docs.sentry.io/platforms/dotnet/guides/aspnetcore/

使用

1、安装nuget:

Sentry.AspNetCore

2、UseSentry

hostBuilder.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSentry((options) => { options.Dsn = "xxxxxxxxxx"; }); webBuilder.UseStartup<Startup>(); });

可以通过UseSentry添加配置,也可以通过配置文件添加配置,如下:

{ "Logging": {}, "Sentry": { "Dsn": "xxxxxx" } } 配置

  • Dsn
    DSN告诉 SDK 将事件发送到哪里。如果未提供此值,SDK 将尝试从SENTRY_DSN环境变量中读取它。如果该变量也不存在,SDK 将不会发送任何事件。
  • MaxBreadcrumbs
    此变量控制应捕获的面包屑的总量。这默认为100.
  • AttachStacktrace
    启用后,堆栈跟踪会自动附加到所有记录的消息。堆栈跟踪总是附加到异常上;但是,当设置此选项时,堆栈跟踪也会随消息一起发送。
    对于有堆栈跟踪和没有堆栈跟踪的事件,Sentry 中的分组是不同的。因此,当您为某些事件启用或禁用此标志时,您将获得新组。
  • Environment
    设置环境,默认取环境变量ASPNETCORE_ENVIRONMENT
  • Debug
    打开或关闭调试模式。如果启用调试,如果发送事件出现问题,SDK 将尝试打印有用的调试信息。默认值为始终false。通常不建议在生产中打开它,尽管打开debug模式不会引起任何安全问题。
  • BeforeSend钩子
    发生的错误异常可以在发送到 sentry 服务器端之前做修改,对于要忽略的异常也可以在这个事件中做

options.BeforeSend = (sentryEvent) => { // ignore TaskCanceledException/OperationCanceledException if (sentryEvent.Exception is TaskCanceledException || sentryEvent.Exception is OperationCanceledException) { return null; } return sentryEvent; };

  • BeforeBreadcrumb钩子

options.BeforeBreadcrumb = breadcrumb // 将类型是“Spammy.Logger”的面包屑丢弃 => breadcrumb.Category == "Spammy.Logger" ? null : breadcrumb;

  • MaxBreadcrumbs
    应捕获的面包屑的最大数。这默认为100.
  • MaxRequestBodySize
    是否应捕获 HTTP 请求正文。
    • never:从不发送请求正文。
    • small:只会捕获小的请求主体。small 的截止值取决于 SDK(通常为 4KB)。
    • medium:会捕获中小请求(一般为10KB)。
    • always:只要 Sentry 可以理解,SDK 将始终捕获请求正文。
      挂钩
  • SampleRate
    采样率,范围为0.0至1.0。默认值1.0表示发送 100% 的错误事件。如果设置为0.1仅发送 10% 的错误事件。事件是随机挑选的。
  • StackTraceMode
    • Original(原始 )- 默认 .NET 堆栈跟踪格式。
    • Enhanced(增强 )- 包括async、返回类型、参数等。
  • DiagnosticLevel
  • Release
  • SendDefaultPii
  • MaxCacheItems
issue(问题)

sentry 里每一个错误/异常被视为一个 issue,在 sentry 的后台可以看到对应项目的错误信息
事件是向 Sentry 发送数据的一个实例。通常,此数据是错误或异常。问题是一组类似事件。

tags(标签)

标签可用于索引、搜索事件
有些标签是由 Sentry 自动设置的。我们强烈建议不要覆盖这些标签。标签的常见用途包括主机名、平台版本和用户语言。

当前范围定义标签:
范围内的所有未来事件都包含相同的标签。

SentrySdk.ConfigureScope(scope => { scope.SetTag("page.locale", "de-at"); });

定义默认标签:
所有范围都显示

.NET Core版本中,Sentry如何实现高效异常监控?

webBuilder.UseSentry(config =>{ config.DefaultTags.Add("aa", CONST.A); config.DefaultTags.Add("bb", CONST.B);}); breadcrumbs(面包屑)

Sentry 使用面包屑创建在问题之前发生的事件跟踪。可记录更丰富的数据。
面包屑与事件不同:它们不会在 Sentry 中创建事件,而是会被缓存直到发送下一个事件。

手动添加面包屑

SentrySdk.AddBreadcrumb( message: "Authenticated user " + user.Email, category: "auth", level: BreadcrumbLevel.Info); 自动面包屑

SDK 及其相关集成将自动记录多种类型的面包屑。比如:记录的日志也会添加到面包屑中

自定义面包屑

SDK 允许您通过BeforeBreadcrumb钩子自定义面包屑。该函数可以修改面包屑或决定通过返回完全丢弃它null:
这个钩子传递了一个已经组装好的面包屑。

options.BeforeBreadcrumb = breadcrumb // 将类型是“Spammy.Logger”的面包屑丢弃 => breadcrumb.Category == "Spammy.Logger" ? null : breadcrumb; Identify User(识别用户)

将登录用户信息绑定到Scope

SentrySdk.ConfigureScope(scope => { scope.User = new User { Email = "john.doe@example.com" }; }); 添加上下文

自定义上下文允许您将任意数据附加到事件。通常,此上下文在其生命周期中捕获的任何问题之间共享。您无法搜索这些,但可以在问题页面上查看它们
上下文名称没有限制。在上下文对象中,除了在type内部使用的 之外,所有键都是允许的。

SentrySdk.ConfigureScope(scope => { scope.Contexts["character111111"] = new { Name = "Mighty Fighter", Age = 19, AttackType = "melee" }; });

添加用户

SentrySdk.ConfigureScope(scope => { scope.User = new User { Id = "1", Username = "fan", Email = "410577910@qq.com" }; });

User Feedback(用户反馈)?

var eventId = SentrySdk.CaptureMessage("An event that will receive user feedback."); SentrySdk.CaptureUserFeedback(eventId, "user@example.com", "It broke.", "The User"); 手动发送消息

SentrySdk.CaptureMessage("Something went wrong"); 手动发送异常

如果你捕获了异常,将不会向Sentry发送事件,可以手动发送:

try { AFunctionThatMightFail(); } catch (Exception err) { SentrySdk.CaptureException(err); } 指纹识别

所有事件都有指纹。具有相同指纹的事件被组合成一个问题。默认情况下,Sentry 将运行我们的一种内置分组算法,以根据事件中可用的信息(例如stacktrace、exception和)生成指纹

options.BeforeSend = @event => { if (@event.Exception is SqlConnectionException ex) { @event.SetFingerprint(new [] { "database-connection-error" }); } return @event; }; 

标签:NETCoreSentry

本文共计1683个文字,预计阅读时间需要7分钟。

.NET Core版本中,Sentry如何实现高效异常监控?

简介:针对.NET Core的两种集成方式:基于Microsoft.Extensions.Logging的集成方式:Sentry.Extensions.Logging;基于asp.net core框架的集成方式:Sentry.AspNetCore。源码:https://github.com/getsentry/sentry-dotnet 官网:https://www.sentry.io/

简介 针对.NET Core的两种集成方式

基于 Microsoft.Extensions.Logging 的集成方式:Sentry.Extensions.Logging
基于 asp.net core 框架的集成方式:Sentry.AspNetCore

源码:github.com/getsentry/sentry-dotnet
官方文档:docs.sentry.io/platforms/dotnet/guides/aspnetcore/

使用

1、安装nuget:

Sentry.AspNetCore

2、UseSentry

hostBuilder.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSentry((options) => { options.Dsn = "xxxxxxxxxx"; }); webBuilder.UseStartup<Startup>(); });

可以通过UseSentry添加配置,也可以通过配置文件添加配置,如下:

{ "Logging": {}, "Sentry": { "Dsn": "xxxxxx" } } 配置

  • Dsn
    DSN告诉 SDK 将事件发送到哪里。如果未提供此值,SDK 将尝试从SENTRY_DSN环境变量中读取它。如果该变量也不存在,SDK 将不会发送任何事件。
  • MaxBreadcrumbs
    此变量控制应捕获的面包屑的总量。这默认为100.
  • AttachStacktrace
    启用后,堆栈跟踪会自动附加到所有记录的消息。堆栈跟踪总是附加到异常上;但是,当设置此选项时,堆栈跟踪也会随消息一起发送。
    对于有堆栈跟踪和没有堆栈跟踪的事件,Sentry 中的分组是不同的。因此,当您为某些事件启用或禁用此标志时,您将获得新组。
  • Environment
    设置环境,默认取环境变量ASPNETCORE_ENVIRONMENT
  • Debug
    打开或关闭调试模式。如果启用调试,如果发送事件出现问题,SDK 将尝试打印有用的调试信息。默认值为始终false。通常不建议在生产中打开它,尽管打开debug模式不会引起任何安全问题。
  • BeforeSend钩子
    发生的错误异常可以在发送到 sentry 服务器端之前做修改,对于要忽略的异常也可以在这个事件中做

options.BeforeSend = (sentryEvent) => { // ignore TaskCanceledException/OperationCanceledException if (sentryEvent.Exception is TaskCanceledException || sentryEvent.Exception is OperationCanceledException) { return null; } return sentryEvent; };

  • BeforeBreadcrumb钩子

options.BeforeBreadcrumb = breadcrumb // 将类型是“Spammy.Logger”的面包屑丢弃 => breadcrumb.Category == "Spammy.Logger" ? null : breadcrumb;

  • MaxBreadcrumbs
    应捕获的面包屑的最大数。这默认为100.
  • MaxRequestBodySize
    是否应捕获 HTTP 请求正文。
    • never:从不发送请求正文。
    • small:只会捕获小的请求主体。small 的截止值取决于 SDK(通常为 4KB)。
    • medium:会捕获中小请求(一般为10KB)。
    • always:只要 Sentry 可以理解,SDK 将始终捕获请求正文。
      挂钩
  • SampleRate
    采样率,范围为0.0至1.0。默认值1.0表示发送 100% 的错误事件。如果设置为0.1仅发送 10% 的错误事件。事件是随机挑选的。
  • StackTraceMode
    • Original(原始 )- 默认 .NET 堆栈跟踪格式。
    • Enhanced(增强 )- 包括async、返回类型、参数等。
  • DiagnosticLevel
  • Release
  • SendDefaultPii
  • MaxCacheItems
issue(问题)

sentry 里每一个错误/异常被视为一个 issue,在 sentry 的后台可以看到对应项目的错误信息
事件是向 Sentry 发送数据的一个实例。通常,此数据是错误或异常。问题是一组类似事件。

tags(标签)

标签可用于索引、搜索事件
有些标签是由 Sentry 自动设置的。我们强烈建议不要覆盖这些标签。标签的常见用途包括主机名、平台版本和用户语言。

当前范围定义标签:
范围内的所有未来事件都包含相同的标签。

SentrySdk.ConfigureScope(scope => { scope.SetTag("page.locale", "de-at"); });

定义默认标签:
所有范围都显示

.NET Core版本中,Sentry如何实现高效异常监控?

webBuilder.UseSentry(config =>{ config.DefaultTags.Add("aa", CONST.A); config.DefaultTags.Add("bb", CONST.B);}); breadcrumbs(面包屑)

Sentry 使用面包屑创建在问题之前发生的事件跟踪。可记录更丰富的数据。
面包屑与事件不同:它们不会在 Sentry 中创建事件,而是会被缓存直到发送下一个事件。

手动添加面包屑

SentrySdk.AddBreadcrumb( message: "Authenticated user " + user.Email, category: "auth", level: BreadcrumbLevel.Info); 自动面包屑

SDK 及其相关集成将自动记录多种类型的面包屑。比如:记录的日志也会添加到面包屑中

自定义面包屑

SDK 允许您通过BeforeBreadcrumb钩子自定义面包屑。该函数可以修改面包屑或决定通过返回完全丢弃它null:
这个钩子传递了一个已经组装好的面包屑。

options.BeforeBreadcrumb = breadcrumb // 将类型是“Spammy.Logger”的面包屑丢弃 => breadcrumb.Category == "Spammy.Logger" ? null : breadcrumb; Identify User(识别用户)

将登录用户信息绑定到Scope

SentrySdk.ConfigureScope(scope => { scope.User = new User { Email = "john.doe@example.com" }; }); 添加上下文

自定义上下文允许您将任意数据附加到事件。通常,此上下文在其生命周期中捕获的任何问题之间共享。您无法搜索这些,但可以在问题页面上查看它们
上下文名称没有限制。在上下文对象中,除了在type内部使用的 之外,所有键都是允许的。

SentrySdk.ConfigureScope(scope => { scope.Contexts["character111111"] = new { Name = "Mighty Fighter", Age = 19, AttackType = "melee" }; });

添加用户

SentrySdk.ConfigureScope(scope => { scope.User = new User { Id = "1", Username = "fan", Email = "410577910@qq.com" }; });

User Feedback(用户反馈)?

var eventId = SentrySdk.CaptureMessage("An event that will receive user feedback."); SentrySdk.CaptureUserFeedback(eventId, "user@example.com", "It broke.", "The User"); 手动发送消息

SentrySdk.CaptureMessage("Something went wrong"); 手动发送异常

如果你捕获了异常,将不会向Sentry发送事件,可以手动发送:

try { AFunctionThatMightFail(); } catch (Exception err) { SentrySdk.CaptureException(err); } 指纹识别

所有事件都有指纹。具有相同指纹的事件被组合成一个问题。默认情况下,Sentry 将运行我们的一种内置分组算法,以根据事件中可用的信息(例如stacktrace、exception和)生成指纹

options.BeforeSend = @event => { if (@event.Exception is SqlConnectionException ex) { @event.SetFingerprint(new [] { "database-connection-error" }); } return @event; }; 

标签:NETCoreSentry