Sentry Rust SDK: 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

```rust use std::io;

use actix_web::{get, App, Error, HttpRequest, HttpServer};

[get("/")]

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

fn main() -> io::Result<()> { let guard = sentry::init(sentry::ClientOptions { release: sentry::releasename!(), ..Default::default() }); std::env::setvar("RUSTBACKTRACE", "1");

let runtime = tokio::runtime::Builder::new_multi_thread()
    .enable_all()
    .build()?;
runtime.block_on(async move {
    HttpServer::new(|| {
        App::new()
            .wrap(sentry_actix::Sentry::new())
            .service(failing)
    })
    .bind("127.0.0.1:3001")?
    .run()
    .await
})

} ```

Using Release Health

The actix middleware will automatically start a new session for each request when auto_session_tracking is enabled and the client is configured to use SessionMode::Request.

rust let _sentry = sentry::init(sentry::ClientOptions { release: sentry::release_name!(), session_mode: sentry::SessionMode::Request, auto_session_tracking: true, ..Default::default() });

Reusing the Hub

This integration will automatically create a new per-request Hub from the main Hub, and update the current Hub instance. For example, the following will capture a message in the current request's Hub:

rust sentry::capture_message("Something is not well", sentry::Level::Warning);

Resources

License: Apache-2.0