use axum::{
extract::Request,
middleware::Next,
response::Response,
};
use tracing::{info, span, Level};
use std::time::Instant;
pub async fn logging_middleware(
request: Request,
next: Next,
) -> Response {
let method = request.method().clone();
let uri = request.uri().clone();
let start = Instant::now();
let span = span!(Level::INFO, "http_request", method = %method, uri = %uri);
let _enter = span.enter();
let response = next.run(request).await;
let duration = start.elapsed();
let status = response.status();
info!(
duration_ms = duration.as_millis(),
status = status.as_u16(),
"Request completed"
);
response
}