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!
rust log log4rs cargo
Commentami!