Rust集成Sentry之actix-web集成

Crate:sentry-actix(必须单独安装)

sentry-actix crate为actix-web添加了一个中间件,用于捕获错误并将其报告给Sentry。

要使用此中间件,只需配置Sentry,然后将其作为中间件添加到您的actix Web应用程序。由于actix通常使用不可发送的对象并且高度并发,因此该中间件会为每个请求创建一个新的集线器。因此,除非绑定actix集线器,否则许多哨兵集成(例如面包屑)都不起作用。

一、例子

在你的Cargo.toml:

[dependencies]
sentry = "0.12.0"
sentry-actix = "0.11.0"

你的Rust代码:

extern crate actix_web;
extern crate sentry;
extern crate sentry_actix;

use std::env;
use std::io;

use actix_web::{server, App, Error, HttpRequest};
use sentry_actix::SentryMiddleware;

fn failing(_req: &HttpRequest) -> Result<String, Error> {
    Err(io::Error::new(io::ErrorKind::Other, "An error happens here").into())
}

fn main() {
    let _guard = sentry::init("https://<key>@sentry.io/<project>");
    env::set_var("RUST_BACKTRACE", "1");
    sentry::integrations::panic::register_panic_handler();

    server::new(|| {
        App::new()
            .middleware(SentryMiddleware::new())
            .resource("/", |r| r.f(failing))
    }).bind("127.0.0.1:3001")
        .unwrap()
        .run();
}

 二、重用集线器

如果使用此集成,则Hub :: current()返回的集线器通常是错误的集线器。要获取特定请求,您需要使用ActixWebHubExt特征:

use sentry::{Hub, Level};
use sentry_actix::ActixWebHubExt;

let hub = Hub::from_request(req);
hub.capture_message("Something is not well", Level::Warning);

集线器也可以是最新的:

use sentry::{Hub, Level};
use sentry_actix::ActixWebHubExt;

let hub = Hub::from_request(req);
Hub::run(hub, || {
    sentry::capture_message("Something is not well", Level::Warning);
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值