基于 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
sentry 里每一个错误/异常被视为一个 issue,在 sentry 的后台可以看到对应项目的错误信息
事件是向 Sentry 发送数据的一个实例。通常,此数据是错误或异常。问题是一组类似事件。
标签可用于索引、搜索事件
有些标签是由 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网络转载请说明出处】