feat: add tracing wrapper for requests
This commit is contained in:
parent
e3d8c967f5
commit
2ae860f176
3 changed files with 59 additions and 1 deletions
21
Cargo.lock
generated
21
Cargo.lock
generated
|
|
@ -1049,6 +1049,8 @@ dependencies = [
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sqlx",
|
"sqlx",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"tower",
|
||||||
|
"tower-http",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-bunyan-formatter",
|
"tracing-bunyan-formatter",
|
||||||
"tracing-log 0.2.0",
|
"tracing-log 0.2.0",
|
||||||
|
|
@ -2487,6 +2489,25 @@ dependencies = [
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tower-http"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0da193277a4e2c33e59e09b5861580c33dd0a637c3883d0fa74ba40c0374af2e"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.4.1",
|
||||||
|
"bytes",
|
||||||
|
"http 1.0.0",
|
||||||
|
"http-body 1.0.0",
|
||||||
|
"http-body-util",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tower",
|
||||||
|
"tower-layer",
|
||||||
|
"tower-service",
|
||||||
|
"tracing",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower-layer"
|
name = "tower-layer"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ serde_json = "1"
|
||||||
# serde_with = "3"
|
# serde_with = "3"
|
||||||
# Axum
|
# Axum
|
||||||
axum = { version = "0.7" }
|
axum = { version = "0.7" }
|
||||||
# tower-http = { version = "0.5", features = ["fs"] }
|
tower = { version = "0.4" }
|
||||||
|
tower-http = { version = "0.5", features = ["trace", "request-id", "util"] }
|
||||||
# tower-cookies = "0.10"
|
# tower-cookies = "0.10"
|
||||||
# Others
|
# Others
|
||||||
config = "0.14"
|
config = "0.14"
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,29 @@
|
||||||
|
use axum::http::Request;
|
||||||
use axum::routing::IntoMakeService;
|
use axum::routing::IntoMakeService;
|
||||||
use axum::serve::Serve;
|
use axum::serve::Serve;
|
||||||
use axum::Router;
|
use axum::Router;
|
||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
use tokio::net::TcpListener;
|
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
|
/// API routing
|
||||||
///
|
///
|
||||||
|
|
@ -11,6 +32,21 @@ pub fn app(connection: PgPool) -> Router {
|
||||||
Router::new()
|
Router::new()
|
||||||
.merge(crate::routes::routes_health_check())
|
.merge(crate::routes::routes_health_check())
|
||||||
.merge(crate::routes::routes_subscriptions(connection.clone()))
|
.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
|
/// Start the server
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue