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 在 调试
513,379 每月下载量
在 149 个crate中(直接使用19个) 使用
380KB
7.5K SLoC
Sentry Rust SDK:sentry-core
此crate提供了Sentry SDK的核心,可用于记录事件和错误。
sentry-core
旨在为想要为其代码添加Sentry仪表化的集成作者和第三方库作者提供。
希望将sentry集成到其应用程序中的普通用户应使用 sentry
crate,该crate附带默认传输和针对各种第三方库的大量集成。
核心概念
此crate遵循 统一API 指南,并围绕 Client
, [Hub
] 和 Scope
的概念以及通过 Integration
, Transport
和 TransportFactory
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
- Discord 服务器用于项目讨论。
- 关注 @getsentry 以获取更新
依赖项
~3–5MB
~117K SLoC