1 unstable release

0.1.0 Jul 26, 2023

#1262 in HTTP server

33 downloads per month

MIT license

14KB
282 lines

axum-trace-id

Axum middleware for adding trace ids to requests.

Basic Usage

Adding the SetTraceIdLayer<T> layer will make TraceId<T> available via the request and response extensions. The crate also provides an extractor to access the trace id in a handler. For special use-cases (e.g. lazily generating trace ids only in case of http errors) you can implement MakeTraceId on your type.

use axum::{routing::get, Router};
use axum_trace_id::{SetTraceIdLayer, TraceId};

let app: Router = Router::new()
     .route(
         "/",
         get(|trace_id: TraceId<String>| async move { trace_id.to_string() }),
     )
     .layer(SetTraceIdLayer::<String>::new());

Use with tracing

To use with tracing, you can access the requests tracing id via the extensions.

use axum::{http::Request, routing::get, Router};
use axum_trace_id::{SetTraceIdLayer, TraceId};
use tower_http::trace::TraceLayer;
use tracing::info_span;

let app = Router::new()
    .route("/", get(|| async { "" }))
    .layer(TraceLayer::new_for_http().make_span_with(|request: &Request<_>| {
        let trace_id = request.extensions().get::<TraceId<String>>().unwrap();

        info_span!("http_request", trace_id = trace_id)
    }));

License

This project is licensed under the MIT license.

Dependencies

~6.5–8.5MB
~152K SLoC