feat: add tracing wrapper for requests

This commit is contained in:
Sandro Eiler 2024-02-05 11:33:13 +01:00
parent e3d8c967f5
commit 2ae860f176
3 changed files with 59 additions and 1 deletions

View file

@ -1,8 +1,29 @@
use axum::http::Request;
use axum::routing::IntoMakeService;
use axum::serve::Serve;
use axum::Router;
use sqlx::PgPool;
use tokio::net::TcpListener;
use tower::ServiceBuilder;
use tower_http::{
request_id::{MakeRequestId, RequestId},
trace::{DefaultMakeSpan, DefaultOnResponse, TraceLayer},
ServiceBuilderExt,
};
use tracing::Level;
use uuid::Uuid;
// from https://docs.rs/tower-http/0.2.5/tower_http/request_id/index.html#using-uuids
#[derive(Clone)]
struct MakeRequestUuid;
impl MakeRequestId for MakeRequestUuid {
fn make_request_id<B>(&mut self, _: &Request<B>) -> Option<RequestId> {
let request_id = Uuid::new_v4().to_string();
Some(RequestId::new(request_id.parse().unwrap()))
}
}
/// API routing
///
@ -11,6 +32,21 @@ pub fn app(connection: PgPool) -> Router {
Router::new()
.merge(crate::routes::routes_health_check())
.merge(crate::routes::routes_subscriptions(connection.clone()))
.layer(
// from https://docs.rs/tower-http/0.2.5/tower_http/request_id/index.html#using-trace
ServiceBuilder::new()
.set_x_request_id(MakeRequestUuid)
.layer(
TraceLayer::new_for_http()
.make_span_with(
DefaultMakeSpan::new()
.include_headers(true)
.level(Level::INFO),
)
.on_response(DefaultOnResponse::new().include_headers(true)),
)
.propagate_x_request_id(),
)
}
/// Start the server