28个版本
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.23.0 | 2021年7月8日 |
183 调试类别中的排名
每月下载量416,140
在17个代码包中使用(直接使用7个)
255KB
4.5K SLoC
Sentry Rust SDK:sentry-tracing
支持从
支持三种方式使用Info
级别以上的事件记录为面包屑,Error
级别以上的事件捕获为错误事件,Info
级别以上的跨度记录为事务。
配置
要完全启用追踪集成,设置跟踪样本率并向跟踪订阅者添加一层
use tracing_subscriber::prelude::*;
let _guard = sentry::init(sentry::ClientOptions {
// Enable capturing of traces; set this a to lower value in production:
traces_sample_rate: 1.0,
..sentry::ClientOptions::default()
});
// Register the Sentry tracing layer to capture breadcrumbs, events, and spans:
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.with(sentry_tracing::layer())
.init();
还可以设置一个显式过滤器,以自定义Sentry捕获哪些日志事件
use sentry_tracing::EventFilter;
use tracing_subscriber::prelude::*;
let sentry_layer = sentry_tracing::layer().event_filter(|md| match md.level() {
&tracing::Level::ERROR => EventFilter::Event,
_ => EventFilter::Ignore,
});
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.with(sentry_layer)
.init();
日志消息
追踪事件会自动创建与当前作用域关联的面包屑,在下面的示例中,它们将显示在作用域内捕获的错误和事务中。
传递给事件宏的字段将自动作为结构化数据在Sentry中跟踪。对于面包屑,它们将直接与面包屑消息一起显示。对于其他类型的数据,请参阅下面的内容。
for i in 0..10 {
tracing::debug!(number = i, "Generates a breadcrumb");
}
跟踪错误
产生错误的最简单方法是通过记录一个具有 ERROR
级别的日志事件。这将在 Sentry 中创建一个分组的问题。要添加自定义信息,请将字段预置于消息之前。如果字段以 "tags."
tracing::error!(
field = "value", // will become a context field
tags.custom = "value", // will become a tag in Sentry
"this is an error with a custom tag",
);
要跟踪 错误结构体,将错误特质的引用作为字段分配给其中一个日志宏。按照惯例,建议使用 ERROR
级别并将其分配给名为 error
的字段,尽管集成也可以使用所有其他级别和字段名。
传递给宏的所有其他字段都会在 Sentry 中的自定义 "跟踪字段" 上下文中捕获。
use std::error::Error;
use std::io;
let custom_error = io::Error::new(io::ErrorKind::Other, "oh no");
tracing::error!(error = &custom_error as &dyn Error);
还可以将错误消息与错误结构体组合起来。在 Sentry 中,这会根据错误日志的消息和位置创建分组的问题,并将传递的错误作为嵌套源添加。
use std::error::Error;
use std::io;
let custom_error = io::Error::new(io::ErrorKind::Other, "oh no");
tracing::error!(error = &custom_error as &dyn Error, "my operation failed");
跟踪跨度
集成会自动跟踪 tracing
跨度作为 Sentry 中的跨度。一种方便的方法是使用 #[instrument]
属性宏,该宏为 Sentry 中的函数创建事务。
函数参数会自动添加为上下文字段,可以通过属性参数进行配置。有关更多信息,请参阅宏的文档。
use std::time::Duration;
use tracing_subscriber::prelude::*;
// Functions instrumented by tracing automatically report
// their span as transactions.
#[tracing::instrument]
async fn outer() {
for i in 0..10 {
inner(i).await;
}
}
// This creates spans inside the outer transaction, unless called directly.
#[tracing::instrument]
async fn inner(i: u32) {
// Also works, since log events are ingested by the tracing system
tracing::debug!(number = i, "Generates a breadcrumb");
tokio::time::sleep(Duration::from_millis(100)).await;
}
资源
许可证:Apache-2.0
- Discord 服务器用于项目讨论。
- 关注 @getsentry 以获取更新
依赖关系
~4–6.5MB
~144K SLoC