# Sentry Rust SDK: sentry-actix
This crate adds a middleware for [`actix-web`](https://actix.rs/) 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::release_name!(),
..Default::default()
});
std::env::set_var("RUST_BACKTRACE", "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
- [Discord](https://discord.gg/ez5KZN7) server for project discussions.
- Follow [@getsentry](https://twitter.com/getsentry) on Twitter for updates