axum-trace-id

Crates.ioaxum-trace-id
lib.rsaxum-trace-id
version0.1.0
sourcesrc
created_at2023-07-26 15:11:10.170779
updated_at2023-07-26 15:11:10.170779
descriptionAxum middleware for adding trace ids to requests.
homepage
repositoryhttps://github.com/dominik-seeger/axum-trace-id
max_upload_size
id926571
size14,884
Dominik Seeger (dominik-seeger)

documentation

README

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.

Commit count: 1

cargo fmt