use crate::{
traits::{MiddlewareTrait, RequestTrait},
Middleware,
};
use ayun_config::config;
use tower_http::trace::TraceLayer;
pub struct Logger;
impl MiddlewareTrait for Logger {
fn handle() -> Middleware {
Box::new(|router| Ok(router.layer(TraceLayer::new_for_http().make_span_with(make_span))))
}
}
fn make_span(request: &axum::http::Request<axum::body::Body>) -> tracing::Span {
let request_id = request
.id()
.unwrap_or_else(|| panic!("[middleware] `Logger` applied error: `RequestId` missing"));
let environment = config::<config::App>("app")
.unwrap_or_else(|err| panic!("[middleware] `Logger` applied error: {err}"))
.environment;
tracing::debug_span!(
"server",
"method" = %request.method(),
"uri" = %request.uri(),
"version" = ?request.version(),
"user_agent" = request.user_agent(),
"request_id" = %request_id,
"environment" = %environment,
)
}