Skip to main content

server_middleware/middleware/
log.rs

1#![allow(unused_variables)] //允许未使用的变量
2#![allow(dead_code)] //允许未使用的代码
3#![allow(unused_must_use)]
4
5use axum::extract::Request;
6use axum::middleware::Next;
7use axum::response::Response;
8use std::time::Instant;
9use tracing::info;
10
11/// 日志打印中间件
12/// @description 打印请求耗时
13pub async fn logging_middleware(request: Request, next: Next) -> Response {
14    // 请求方法
15    let method = request.method().clone();
16    // 请求路径
17    let path = request.uri().path().to_owned();
18    // 开始时间
19    let start = Instant::now();
20    // 打印请求信息
21    info!("→→→ {} {} started", method, path);
22
23    let response = next.run(request).await;
24
25    let duration = start.elapsed();
26    // 打印请求完成时间
27    info!(
28        "←←← {} {} completed in {}ms (status: {})",
29        method,
30        path,
31        duration.as_millis(),
32        response.status()
33    );
34
35    response
36}