Rust API - Adicionando logs com rust - Part VIII


Nesse momento, nós vamos trabalhar diretamente na nossa main.rs chamando o nosso middleware Logger:

use actix_web::{
    web,
    App,
    HttpServer,
    middleware::Logger
};

E depois dentro da nossa função main, nós vamos chamar o nosso logger olhando para as requests que estamos chamando:

if std::env::var_os("RUST_LOG").is_none() {
    std::env::set_var("RUST_LOG", "actix_web=info");
}

dotenv().ok();
env_logger::init();

E o nosso HttpServer, no final dele, terá um wrapper para observar as nossas requests:

 HttpServer::new(move || {
        App::new()
            .app_data(web::Data::new(AppState { db: pool.clone() }))
            .configure(services::config)
            .wrap(Logger::default()) // <- aqui
    })
    .bind(("127.0.0.1", 8080))?
    .run().await

O nosso arquivo todo vai ficar assim:

src/main.rs
mod services;
mod model;
mod schema;

use actix_web::{
    web,
    App,
    HttpServer,
    middleware::Logger
};

use dotenv::dotenv;
use sqlx::{ postgres::PgPoolOptions, Pool, Postgres };

pub struct AppState {
    db: Pool<Postgres>,
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    if std::env::var_os("RUST_LOG").is_none() {
        std::env::set_var("RUST_LOG", "actix_web=info");
    }

    dotenv().ok();
    env_logger::init();

    let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
    let pool = match PgPoolOptions::new().max_connections(10).connect(&database_url).await {
        Ok(pool) => {
            println!("Connection DB resolved");
            pool
        }
        Err(error) => {
            println!("Failed to connect to the dabase: {:?}", error);
            std::process::exit(1);
        }
    };

    println!("Server started successfully");

    HttpServer::new(move || {
        App::new()
            .app_data(web::Data::new(AppState { db: pool.clone() }))
            .configure(services::config)
            .wrap(Logger::default())
    })
    .bind(("127.0.0.1", 8080))?
    .run().await
}

E se você rodar o healthchecker verá logs assim:

[2023-06-12T20:02:46Z INFO  actix_web::middleware::logger] 127.0.0.1 "GET /api/healthchecker HTTP/1.1" 200 77 "-" "insomnia/2023.2.2" 0.000361

Bem, é isso, ao menos vou ficar por aqui kk Feliz por mim que conclui kk e se você gostou, feliz por ti que leu até aqui, grande abraço e até mais =]