Sentry.Serilog 未添加面包屑

问题描述 投票:0回答:1

我对 Sentry 还很陌生,我正在尝试在我的 Asp.Net Core Web 应用程序中测试 Serilog / Sentry 集成的基本功能。

我使用的是 SentrySeirlog NuGet 包的 3.21.0 版本,因为这是我的sentry.io 服务器的版本。

这是我的配置

 Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .Enrich.FromLogContext()
                .Enrich.WithMachineName()
                .WriteTo.Async(a => a.Console())
                .WriteTo.Sentry(o =>
                {
                    o.MinimumBreadcrumbLevel = LogEventLevel.Verbose;
                    o.MinimumEventLevel = LogEventLevel.Verbose;
                    o.Dsn = configuration["Sentry:Dsn"];
                    o.AttachStacktrace = bool.Parse(configuration["Sentry:AttachStackTrace"]);
                    o.Environment = configuration["AppSettings:Environment"];
                })
                .CreateLogger();

我已阅读官方文档,这应该在我的sentry.io 实例上为任何对 Log 的调用创建一个事件。来自 Serilog。

我的 Sentry 实例的实际结果是,它为每次调用 Log.Error 或代码中任何未处理的异常创建一个事件,但它没有向该事件添加任何 BreadCrumb。

谁能告诉我我错过了什么?

我尝试更改这些属性的值,但结果没有变化。

我还尝试在 Catch 块中使用 SentrySdk.AddBreadCrum("My BreadCrumb") 手动添加 BreadCrumb,这按预期工作。但是,我想通过 Serilog 来完成,而不是使用 SentrySdk 类。

asp.net-core .net-core serilog sentry
1个回答
0
投票

Sentry 在捕获这些事件之后为 SeriLog 事件创建面包屑,因此,如果 SeriLog 中有三个单独的日志消息(A、B 和 C),每个消息都被 Sentry 捕获,则将发送第一个事件 (A)没有任何面包屑...但 A 也会作为面包屑添加(breadcrumbA)。下一个事件 (B) 使用 breadcrumbA 发送,最后一个事件 (C) 使用 2 个面包屑捕获:breadcrumbA 和 breadcrumbB。 这正是 Sentry 中面包屑的用途:

Sentry 使用面包屑来创建问题之前发生的事件轨迹。

另请注意,
面包屑存储在 Sentry 中的“范围”中

,并且每个新事务都有其自己的范围...在 ASP.NET Core 应用程序的上下文中,通常您会为每个请求获取一个新事务您的 ASP.NET Core 应用程序...因此面包屑将在每个请求开始时重置。

© www.soinside.com 2019 - 2024. All rights reserved.