[][src]Crate sentry_actix

This crate adds a middleware for actix-web that captures errors and report them to Sentry.

To use this middleware just configure Sentry and then add it to your actix web app as a middleware. Because actix is generally working with non sendable objects and highly concurrent this middleware creates a new hub per request. As a result many of the sentry integrations such as breadcrumbs do not work unless you bind the actix hub.

Example

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://public@sentry.io/1234");
    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();
}

Reusing the Hub

If you use this integration the Hub::current() returned hub is typically the wrong one. To get the request specific one you need to use the ActixWebHubExt trait:

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

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

The hub can also be made current:

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);
});

Structs

SentryMiddleware

Reports certain failures to sentry.

SentryMiddlewareBuilder

A helper construct that can be used to reconfigure and build the middleware.

Traits

ActixWebHubExt

Hub extensions for actix.

Functions

capture_actix_error

Utility function that takes an actix error and reports it to the default hub.