#[macro_use] extern crate log; extern crate log4rs; use log::LevelFilter; use log4rs::append::console::ConsoleAppender; use log4rs::append::file::FileAppender; use log4rs::encode::pattern::PatternEncoder; use log4rs::config::{Appender, Config, Logger, Root}; fn main() { match std::env::args().nth(1).unwrap_or_else(|| "".to_owned()).as_str() { "f" | "file" => { println!("Load log4rs config from file"); log4rs::init_file("log4rs.yml", Default::default()).unwrap(); }, _ => { println!("Load log4rs config from code"); init_log(); }, } trace!("A trace"); debug!("A debug"); info!("A info"); info!(target:"app", "File info"); warn!("A warn"); error!("A error"); } fn init_log() { let stdout = ConsoleAppender::builder() .encoder(Box::new(PatternEncoder::new("[Console] {d} - {l} -{t} - {m}{n}"))) .build(); let file = FileAppender::builder() .encoder(Box::new(PatternEncoder::new("[File] {d} - {l} - {t} - {m}{n}"))) .build("log/test.log") .unwrap(); let config = Config::builder() .appender(Appender::builder().build("stdout", Box::new(stdout))) .appender(Appender::builder().build("file", Box::new(file))) .logger(Logger::builder() .appender("file") .additive(false) .build("app", LevelFilter::Info)) .build(Root::builder().appender("stdout").build(LevelFilter::Info)) .unwrap(); let _ = log4rs::init_config(config).unwrap(); }