Skip to main content

actus_server/middleware/
logger.rs

1//! A simple request logger that emits a `tracing` event for each request.
2
3use crate::middleware::{Middleware, Outcome};
4use crate::request::Request;
5use actus_reply::WebError;
6use async_trait::async_trait;
7use tracing::info;
8
9/// Logs every incoming request via `tracing`. Add it to the server with
10/// `Server::with_middleware(RequestLogger)`.
11///
12/// ```ignore
13/// use actus::prelude::*;
14///
15/// Server::new(init().await?)
16///     .with_middleware(RequestLogger)
17///     .run(3000).await?;
18/// ```
19pub struct RequestLogger;
20
21#[async_trait]
22impl Middleware for RequestLogger {
23    async fn before(&self, request: &mut Request) -> Result<Outcome, WebError> {
24        info!(
25            method = %request.method,
26            path = %format!("/{}", request.path_parts.join("/")),
27            "request",
28        );
29        Ok(Outcome::Continue)
30    }
31}