A tiny [tower] ([hyper], [axum], [warp] etc) service to generate a random id for each incoming request.
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::
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