version-badge docs-badge license-badge

tower-request-id

A tiny [tower] ([hyper], [axum], [warp] etc) service to generate a random id for each incoming request.

Usage

After enabling [RequestIdLayer] the id is available in [Request.extensions()]. There's also [RequestSpan] to use it as a [tracing::span]. E.g. the following code

```rust use towerrequestid::{RequestId, RequestIdLayer, RequestSpan};

let middlewares = ServiceBuilder::new() .layer(RequestIdLayer) .layer(TraceLayer::newforhttp().makespanwith(RequestSpan)) .into_inner();

let app = Router::new() .route( "/", get(|rq: Request<_>| async move { info!("it's in the request span"); let id = rq.extensions().get::().unwrap(); info!("or directly: {}", id); "ok" }), ) .layer(middlewares); ```

will generate logging output like this:

sh INFO request{id=01FGR4DNBYJ0M7ZV6XS3JHXDD1 method=GET uri=/}: logging: it's in the request span INFO request{id=01FGR4DNBYJ0M7ZV6XS3JHXDD1 method=GET uri=/}: logging: or directly: 01FGR4DNBYJ0M7ZV6XS3JHXDD1

The full example is available in examples/logging.rs