如何将Sentry与.NET 6.0 Worker Service集成?

2023-12-20

我综合了Sentry与 .NET Core 6.0工人服务这边走:

NuGet: 哨兵3.17.1

// Program.cs:

using Sentry;

var sentryDsn = Environment.GetEnvironmentVariable("SENTRY_DSN");
using (SentrySdk.Init(o =>
{
    o.Dsn = sentryDsn;
    o.Debug = true;
    o.TracesSampleRate = 1.0;
}))
{
    IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
    })
    .Build();

    await host.RunAsync();
}
// Worker.cs:

namespace demo_heroku_sentry_worker;
using Sentry;

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

            try
            {
                throw new ApplicationException("Exception inside of worker service");
            }
            catch (Exception e)
            {
                SentrySdk.CaptureException(e);
            }

            await Task.Delay(10000, stoppingToken);
        }
    }
}

这在某种程度上是有效的,因为我在我的 Sentry 仪表板上看到了手动捕获的错误。但是,我担心在应用程序输出上收到的这些警告消息:

      Worker running at: 05/11/2022 15:51:06 +02:00
  Debug: Failed to report an error on a session because there is none active.
   Info: Capturing event.
  Debug: Running processor on exception: Exception inside of worker service
  Debug: Creating SentryStackTrace. isCurrentStackTrace: False.
  Debug: Running main event processor on: Event abb5b3e2ee3a4dbd***********
   Info: Envelope queued up: 'abb5b3e2ee3a4dbda50ef***********'
  Debug: Envelope abb5b3e2ee3a4dbda50e*********** handed off to transport. #1 in queue.
  Debug: Envelope 'abb5b3e2ee3a4dbda50efe7***********' sent successfully. Payload:

我有什么遗漏的吗?


一些东西:

  • 您最初实现它的方式没有任何问题。您显示的调试日志只是 Sentry 正在正常工作。如果您不想看到它们,请不要设置o.Debug = true;

  • 您有手动读取的代码SENTRY_DSN环境变量并将其设置为o.Dsn在初始化期间。这是多余的,因为 SDK 会already如果您未在代码中传递 DSN,请查找该环境变量。执行其中之一,但不要同时执行两者。

  • 如果您担心该消息"Failed to report an error on a session because there is none active."- 这只是说您还没有开始会话,所以 Sentry 的“释放生命值 https://docs.sentry.io/product/releases/health/" 功能将不起作用。您可以通过手动调用来启用它SentrySdk.StartSession(); and SentrySdk.EndSession();在应用程序中适当的位置,或者通过设置o.AutoSessionTracking = true;这更容易。后者将在 Sentry SDK 初始化时启动会话,并在释放时结束会话。

  • 虽然您展示的方法没有任何问题,但您可以从中获得更好的功能日志集成 https://docs.sentry.io/platforms/dotnet/guides/extensions-logging/。示例代码here https://github.com/getsentry/sentry-dotnet/blob/9f7caf11366ef2d73346e7c176ff2478a6904455/samples/Sentry.Samples.GenericHost/Program.cs显示如何将其与通用主机一起使用。使用 nuget 包Sentry.Extensions.Logging https://www.nuget.org/packages/Sentry.Extensions.Logging.

把它们放在一起:

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
    })
    .ConfigureLogging(logging =>
    {
        logging.AddSentry(o =>
        {
            // o.Dsn = "(only if not using the env var)"; 
            o.TracesSampleRate = 1.0;
            o.AutoSessionTracking = true;
        });
    }
    .Build();

await host.RunAsync();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将Sentry与.NET 6.0 Worker Service集成? 的相关文章

随机推荐

  • 如何存储由 std::unique_ptr 给出的抽象类的对象向量?

    我有一个循环 其中我使用一个函数将 std unique ptr 返回到抽象类的对象 我想通过push back将这些对象存储到std vector中 但由于对象是抽象类型 我收到以下错误 error cannot allocate an
  • 防止 Perl 中的循环引用内存泄漏

    我最近问了一个question https stackoverflow com questions 31971633 perl memory management when overwriting objects关于 Perl 中的覆盖对象
  • 如何在asp.net core中将ViewDataDictionary与Html.Partial一起使用?

    我的案例是这样的 Model public class Book public string Id get set public string Name get set public class Comment public string
  • 如何通过spark REST API获取所有作业状态?

    我正在使用 Spark 1 5 1 我想通过 REST API 检索所有作业状态 我使用得到正确的结果 api v1 applications appId 但在找工作的同时 api v1 applications appId jobs得到
  • 金字塔和变色龙中的ajax小部件

    我希望能够在服务器端轻松创建由变色龙和金字塔支持的ajax 小部件 Pyramid 是否提供任何可以使编写小部件变得容易的管道代码 我当前的方法是我有一个使用 home pt 作为渲染器的主视图 home pt 使用宏 base pt 定义
  • 如何在 CUDA 中进行原子加载

    我的问题是如何在 CUDA 中进行原子加载 原子交换可以模拟原子存储 原子加载是否可以以类似的方式廉价地模拟 我可以使用带有 0 的原子添加来自动加载内容 但我认为它很昂贵 因为它执行原子读取 修改 写入而不是仅读取 除了使用volatil
  • android-support-v7-mediarouter 中的 styles.xml 错误

    以下是 android support v7 mediarouter 的 styles xml 文件
  • 如何在多个文件中导入常量

    我有一个包含许多模块的包 每个模块都使用我在每个文件中独立定义的常量 然而 所有这些常数必须彼此一致 所以我尝试在单个文件中定义它们并将其导入每个文件中 当我运行它时 出现未找到常量的错误 他们是让许多其他人导入单个文件并包含常量的干净方法
  • 在 JavaScript 中将 DOM 节点或文档转换为 XML

    假设您在 JavaScript 中收到一个 DOM 元素或文档 例如 window document 您如何将其转换为有效的 XML 更具体地说 对于我的示例 我有一个显示 SVG 的网页 该 SVG 有大量 JavaScript 来允许交
  • Python、tkinter 和导入的类:记录未捕获的异常

    我正在编写一些想要与我的团队共享的脚本 因此我一直在构建一堆日志记录 以便在他们在某个地方遇到崩溃时更容易进行调试 从那时起我就可以看到到底发生了什么崩溃 一般记录到文件没有问题 但我有一个未捕获的异常问题 我尝试了各种方法来让它工作 例如
  • 程序集中的类顺序

    什么决定了程序集中类的顺序 还有 有办法改变它吗 附加信息 您可以自己通过反射检查顺序 也可以使用ILDASM之类的工具 禁用字母排序 然后您也会得到顺序 顺序似乎是由编译器以一种奇怪的方式确定的 我已经尝试了一些事情 例如重命名类 顺序保
  • cakephp 中在哪里定义常量

    我应该在哪个文件中定义特定于我的 cakephp 应用程序的应用程序范围常量 我在 app config bootstrap php 中定义它们 引导 CakePHP 如果您有任何其他配置需求 请使用 CakePHP 的引导文件 该文件位于
  • JBoss 4.2.2 节点开始集群然后互相怀疑

    我有一个在现有 Red Hat 服务器上运行 JBoss 4 2 2 的网站 我正在设置第二台服务器 以便拥有一对集群 然后将进行负载平衡 但是 我无法让它们成功集群 现有服务器启动 JBoss run sh c default b 0 0
  • xslt apply-templates 选择所有剩余的文本节点

    我有这个简化的 xml a b b a
  • 在 C++ 应用程序中使用纯 C(非类包装)函数时是否存在任何问题?

    我计划在 C 应用程序中使用纯 C MPI 库 我不想通过运行例如添加不必要的膨胀 Boost MPI 层将所有内容包装在MPI
  • 如何在Flutter中更改按钮主题的文本颜色

    如果我向我的应用程序添加一个主题 如下所示 class MyApp extends StatelessWidget override Widget build BuildContext context return MaterialApp
  • 使用 _renderItem 类型会破坏自动完成字段

    我有一个 jQuery 自动完成字段 到目前为止一直运行良好 我决定使用 renderItem因为我想在结果中使用一些 HTML 这是我的代码 function prepareClientField var renderItemFuncti
  • Android 中的*窗口焦点*什么时候会改变?

    在我的项目中 我需要捕捉窗口焦点的变化 我已经注销了活动所有阶段的结果 当屏幕亮起时 结果如下 02 17 13 50 03 898 DEBUG InquiryInterface 3829 onCreate screen state fal
  • Java HashMap 调整大小的时间复杂度

    我想知道时间复杂度是多少Java HashMap当负载因子超过阈值时调整大小 据我了解 HashMap 的表大小始终是 2 的偶数次幂 因此每当我们调整表大小时 我们不需要重新散列所有键 如果我错了 请纠正我 我们需要做的就是是分配额外的空
  • 如何将Sentry与.NET 6.0 Worker Service集成?

    我综合了Sentry与 NET Core 6 0工人服务这边走 NuGet 哨兵3 17 1 Program cs using Sentry var sentryDsn Environment GetEnvironmentVariable