diff --git a/src/modes/server.rs b/src/modes/server.rs index 8938446..1e12b8e 100644 --- a/src/modes/server.rs +++ b/src/modes/server.rs @@ -1,13 +1,13 @@ use anyhow::{Result, anyhow}; use axum::{ extract::{ConnectInfo, Path, Query, State}, - http::{HeaderMap, StatusCode}, + http::{HeaderMap, StatusCode, Method, Uri}, response::{Html, Json}, routing::get, Router, }; use clap::Command; -use log::{debug, info, warn}; +use log::{debug, info, warn, trace}; use serde::{Deserialize, Serialize}; use serde_json::json; use std::collections::HashMap; @@ -16,10 +16,12 @@ use std::net::SocketAddr; use std::path::PathBuf; use std::str::FromStr; use std::sync::Arc; +use std::time::Instant; use tokio::sync::Mutex; use tower_http::cors::CorsLayer; use tower::ServiceBuilder; use tower_http::trace::TraceLayer; +use tower::Layer; use crate::compression_engine::{CompressionType, get_compression_engine}; use crate::db; @@ -126,6 +128,7 @@ async fn run_server( .route("/content/:id", get(handle_get_content)) .route("/openapi.json", get(handle_openapi)) .route("/swagger/", get(handle_swagger_ui)) + .layer(axum::middleware::from_fn(logging_middleware)) .layer( ServiceBuilder::new() .layer(TraceLayer::new_for_http()) @@ -152,6 +155,28 @@ async fn run_server( Ok(()) } +// Custom middleware for logging requests and responses +async fn logging_middleware( + req: http::Request, + next: axum::middleware::Next, +) -> Result, axum::response::Response> { + let method = req.method().clone(); + let uri = req.uri().clone(); + let headers = req.headers().clone(); + + // Log incoming request + info!("SERVER: {} {} - Headers: {:?}", method, uri, headers); + + let start = Instant::now(); + let response = next.run(req).await; + let duration = start.elapsed(); + + // Log response + info!("SERVER: {} {} - Status: {} - Duration: {:?}", method, uri, response.status(), duration); + + Ok(response) +} + fn check_auth(headers: &HeaderMap, password: &Option) -> bool { if let Some(expected_password) = password { if let Some(auth_header) = headers.get("authorization") {