1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
use super::errors::Result; use super::LogFormat; use fern::Dispatch; use log::{Level, LevelFilter}; use std::collections::HashMap; pub fn init( level: Level, log_format: LogFormat, target_level_filters: HashMap<String, LevelFilter>, ) -> Result<()> { let level_filter = match level { Level::Debug => LevelFilter::Debug, _ => LevelFilter::Info, }; let mut dispatch = Dispatch::new() .format(move |out, message, record| { match log_format { LogFormat::LevelTargetMessage => out.finish(format_args!( "{:>5} [{}] {}", record.level(), record.target(), message )), _ => out.finish(format_args!("{}", message)), }; }) .level(level_filter) .chain(std::io::stdout()); for (key, value) in target_level_filters.into_iter() { dispatch = dispatch.level_for(key, value); } dispatch.apply()?; Ok(()) }