35个版本

0.34.0 2024年6月5日
0.32.3 2024年4月16日
0.32.2 2024年1月30日
0.32.1 2023年12月18日
0.19.0 2020年6月18日

#24调试

Download history 118800/week @ 2024-04-23 109350/week @ 2024-04-30 104780/week @ 2024-05-07 125972/week @ 2024-05-14 155784/week @ 2024-05-21 122651/week @ 2024-05-28 132615/week @ 2024-06-04 146070/week @ 2024-06-11 111371/week @ 2024-06-18 149258/week @ 2024-06-25 110933/week @ 2024-07-02 132389/week @ 2024-07-09 98323/week @ 2024-07-16 131049/week @ 2024-07-23 130034/week @ 2024-07-30 132783/week @ 2024-08-06

513,379 每月下载量
149 个crate中(直接使用19个) 使用

Apache-2.0

380KB
7.5K SLoC

Sentry

Sentry Rust SDK:sentry-core

此crate提供了Sentry SDK的核心,可用于记录事件和错误。

sentry-core 旨在为想要为其代码添加Sentry仪表化的集成作者和第三方库作者提供。

希望将sentry集成到其应用程序中的普通用户应使用 sentry crate,该crate附带默认传输和针对各种第三方库的大量集成。

核心概念

此crate遵循 统一API 指南,并围绕 Client, [Hub] 和 Scope 的概念以及通过 IntegrationTransportTransportFactory traits的扩展点。

并行、并发和异步

主要的并发原语是 [Hub]。一般来说,所有并发代码,无论是多线程并行还是将来的并发,都需要运行在其自己的 [Hub] 复制品上。尽管 [Hub] 在内部是同步的,但并发使用它可能导致意外结果,甚至引发恐慌。

对于正在并发运行或超出当前执行上下文的线程或任务,需要创建一个新的 [Hub] 并将其绑定到计算上。

use rayon::prelude::*;
use sentry::{Hub, SentryFutureExt};
use std::sync::Arc;

// Parallel multithreaded code:
let outer_hub = Hub::current();
let results: Vec<_> = [1_u32, 2, 3]
    .into_par_iter()
    .map(|num| {
        let thread_hub = Arc::new(Hub::new_from_top(&outer_hub));
        Hub::run(thread_hub, || num * num)
    })
    .collect();

assert_eq!(&results, &[1, 4, 9]);

// Concurrent futures code:
let futures = [1_u32, 2, 3]
    .into_iter()
    .map(|num| async move { num * num }.bind_hub(Hub::new_from_top(Hub::current())));
let results = futures::future::join_all(futures).await;

assert_eq!(&results, &[1, 4, 9]);

对于不是并发且不会超出当前执行上下文的任务,不需要创建新的 [Hub],但必须将当前的 [Hub] 绑定。

use sentry::{Hub, SentryFutureExt};

// Spawned thread that is being joined:
let hub = Hub::current();
let result = std::thread::spawn(|| Hub::run(hub, || 1_u32)).join();

assert_eq!(result.unwrap(), 1);

// Spawned future that is being awaited:
let result = tokio::spawn(async { 1_u32 }.bind_hub(Hub::current())).await;

assert_eq!(result.unwrap(), 1);

最小API

默认情况下,这个包附带所谓的“最小”模式。这种模式将提供所有用于使用sentry对代码进行测量的API,以及编写sentry集成,但它将大量操作丢弃到黑洞中。

在最小模式下,一些类型的功能受到限制。例如,Client 不可用,且 [Hub] 也不保留所有API功能。

特性

  • feature = "client":激活 Client 类型以及某些 [Hub] 功能。
  • feature = "test":激活 test 模块,可用于编写集成测试。它附带一个测试传输,可以捕获所有要检查的事件。
  • feature = "debug-logs":使用 log 包进行调试输出,而不是打印到 stderr。此功能已被弃用,并将由未来的专用日志回调替换。

资源

许可:Apache-2.0

依赖项

~3–5MB
~117K SLoC