【问题标题】:c#, Xamarin.Forms, and SentrySDK context info not making it to sentry errorsc#、Xamarin.Forms 和 SentrySDK 上下文信息未进入哨兵错误
【发布时间】:2021-03-11 22:18:30
【问题描述】:

我正在尝试使用 c# 将用户和设备上下文添加到 SentrySdk,但该信息从未显示在哨兵门户中。

这里是代码

 SentrySdk.ConfigureScope(scope =>
                {
                    scope.SetTag("SStGAppAId", sstgAppId);
                    scope.User = new User
                    {
                        Id = sstgAppId
                    };
                    scope.Contexts.Device.Model= DeviceInfo.Model;
                    scope.Contexts.Device.Manufacturer = DeviceInfo.Manufacturer;
                    scope.Contexts.Device.Name = DeviceInfo.Name;
                    scope.Contexts.Device.Simulator = DeviceInfo.DeviceType != DeviceType.Physical;                    
                });

这是哨兵所显示的

上下文信息没有被发送到哨兵做什么?

【问题讨论】:

  • 问题是 AsyncLocal 的流在 Xamarin 上可能很奇怪。尝试在应用程序的静态构造函数中设置 datqa(也在那里初始化 SDK)。但通常这是 SDK 需要改进的地方。这里有个问题:github.com/getsentry/sentry-dotnet/issues/628

标签: c# xamarin.forms sentry


【解决方案1】:

我们在 3.8.1 版本中解决了“全局模式”问题。

它使得任何对SentrySdk.SetTagAddBreadcrumb 的调用或您通过SentrySdk.ConfigureScope 执行的任何其他操作都会改变一个影响应用的所有线程 的静态Scope 对象>。这对于桌面和移动应用程序很有用,当您有一个用户会话并且您在应用程序的任何位置向 Sentry 添加上下文并希望它在任何其他线程中崩溃时包含在内。

您可以通过以下方式选择加入此模式:

options.IsGlobalModeEnabled = true

默认情况下,此选项将在 Sentry.XamarinSentry.Xamarin.Forms 上设置,您可以使用它们来获取额外的设备信息和系统事件的面包屑。

【讨论】:

    【解决方案2】:

    这是 SDK 中的错误,AsyncLocal 问题。现在要绕过它,您可以在每次登录前调用SentrySdk.ConfigureScope

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多