Creare log in Rust con log4rs

Mattepuffo's logo
Creare log in Rust con log4rs

Creare log in Rust con log4rs

In verità abbiamo bisogno di due librerie per gestire i log in Rust:

Possiamo installarle tramite Cargo:

[dependencies]
log4rs = "1.0.0"
log = "0.4.14"

Questo perchè la prima di default non scrive nulla ne su file ne su console; abbiamo bisogno di una sua "implementazione" per gestire la registrazione dei log.

Come potete vedere dalla documentazione ce ne stanno diverse.

Detto ciò vediamo un esempio di codice:

use log::{debug, error, info, trace, warn, LevelFilter, SetLoggerError};
use log4rs::{
    append::{
        console::{ConsoleAppender, Target},
        file::FileAppender,
    },
    config::{Appender, Config, Root},
    encode::pattern::PatternEncoder,
    filter::threshold::ThresholdFilter,
};

fn main() -> Result<(), SetLoggerError> {
    let level = log::LevelFilter::Info;
    let file_test = "/home/matte-server/Scrivania/test.log";
    let stderr = ConsoleAppender::builder().target(Target::Stderr).build();

    // IMPOSTIAMO IL FORMATO DEL LOG
    let logfile = FileAppender::builder()
        .encoder(Box::new(PatternEncoder::new("{l} - {m}n")))
        .build(file_test)
        .unwrap();

    // IMPOSTIAMO LA CONFIGURAZIONE DEL LOGGER
    // TRACE VIENE ESCLUSO
    let config = Config::builder()
        .appender(Appender::builder().build("logfile", Box::new(logfile)))
        .appender(
            Appender::builder()
                .filter(Box::new(ThresholdFilter::new(level)))
                .build("stderr", Box::new(stderr)),
        )
        .build(
            Root::builder()
                .appender("logfile")
                .appender("stderr")
                .build(LevelFilter::Debug),
        )
        .unwrap();

    let _handle = log4rs::init_config(config)?;

    error!("Console e file");
    warn!("Console e file");
    info!("Console e file");
    debug!("Solo file");
    trace!("Non si vede");

    Ok(())
}

Vi ho messo un pò di commenti, ma dovete fare qualche test per capire meglio come funziona.

Ejoy!


Condividi

Commentami!