Crates.io | axum-trace-id |
lib.rs | axum-trace-id |
version | 0.1.0 |
source | src |
created_at | 2023-07-26 15:11:10.170779 |
updated_at | 2023-07-26 15:11:10.170779 |
description | Axum middleware for adding trace ids to requests. |
homepage | |
repository | https://github.com/dominik-seeger/axum-trace-id |
max_upload_size | |
id | 926571 |
size | 14,884 |
Axum middleware for adding trace ids to requests.
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());
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)
}));
This project is licensed under the MIT license.