当前位置 : 主页 > 编程语言 > 其它开发 >

【.NET Core】Sentry-异常监控

来源:互联网 收集:自由互联 发布时间:2022-05-30
简介针对.NET Core的两种集成方式 基于 Microsoft.Extensions.Logging 的集成方式: Sentry.Extensions.Logging 基于 asp.net core 框架的集成方式: Sentry.AspNetCore 源码:https://github.com/getsentry/sentry-dotnet 官
简介 针对.NET Core的两种集成方式

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

源码:https://github.com/getsentry/sentry-dotnet
官方文档:https://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");
});

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

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;
};
【本文来源:武汉seo http://www.5h5q.com网络转载请说明出处】
上一篇:虚拟环境搭建
下一篇:没有了
网友评论