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 调试类别中的排名

Download history 77089/week @ 2024-05-03 90379/week @ 2024-05-10 95296/week @ 2024-05-17 85866/week @ 2024-05-24 85995/week @ 2024-05-31 92413/week @ 2024-06-07 86527/week @ 2024-06-14 84053/week @ 2024-06-21 96448/week @ 2024-06-28 102107/week @ 2024-07-05 75609/week @ 2024-07-12 93868/week @ 2024-07-19 99055/week @ 2024-07-26 94390/week @ 2024-08-02 120583/week @ 2024-08-09 83690/week @ 2024-08-16

每月下载量416,140
17个代码包中使用(直接使用7个)

Apache-2.0许可

255KB
4.5K SLoC

Sentry

Sentry Rust SDK:sentry-tracing

支持从事件自动捕获自动面包屑、事件和跟踪。

支持三种方式使用包。首先,事件可以捕获为面包屑以供以后使用。其次,错误事件可以捕获为发送到Sentry的事件。最后,跨度可以记录为结构化事务事件。默认情况下,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

依赖关系

~4–6.5MB
~144K SLoC