feat: add tracing wrapper for requests
This commit is contained in:
parent
e3d8c967f5
commit
2ae860f176
3 changed files with 59 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue