repos

blog.bythewood.me-rust

mirror archived upstream

Single-binary self-hosted Markdown blog on Rust axum: no database, live search, Typst PDF export, and strong SEO.

axumblogdockermarkdownminijinjarustself-hostedtypstvite

865 B · 26 lines · Rust Raw History
 1use axum::{extract::Request, middleware::Next, response::Response};
 2use chrono::Local;
 3use std::time::Instant;
 4
 5pub async fn log_requests(req: Request, next: Next) -> Response {
 6    let method = req.method().clone();
 7    let path = req
 8        .uri()
 9        .path_and_query()
10        .map(|p| p.as_str().to_string())
11        .unwrap_or_else(|| req.uri().path().to_string());
12    let start = Instant::now();
13    let response = next.run(req).await;
14    let elapsed_ms = start.elapsed().as_secs_f64() * 1000.0;
15    let status = response.status().as_u16();
16    let now = Local::now().format("%H:%M:%S");
17    let color = match status {
18        200..=299 => "\x1b[32m",
19        300..=399 => "\x1b[36m",
20        400..=499 => "\x1b[33m",
21        _ => "\x1b[31m",
22    };
23    eprintln!("{now} {method:<5} {color}{status}\x1b[0m {elapsed_ms:>7.2}ms  {path}");
24    response
25}