use std::sync::Once;
pub(crate) static INIT: Once = Once::new();
macro_rules! init_logger {
() => {{
init_logger!(log::LevelFilter::Trace)
}};
($level:expr) => {{
use log4rs::Config;
use log4rs::config::{Appender, Root};
use log4rs::append::console::ConsoleAppender;
use log4rs::encode::pattern::PatternEncoder;
use log::LevelFilter;
let level: LevelFilter = $level;
crate::macros::INIT.call_once(|| {
log4rs::init_config(Config::builder()
.appender(Appender::builder().build("stdout", Box::new(ConsoleAppender::builder()
.encoder(Box::new(PatternEncoder::new("\x1B[37m{d(%Y-%m-%d %H:%M:%S%.3f)}\x1B[0m {h({l:>5.5})} \x1B[35m{I:>6.6}\x1B[0m \x1B[37m---\x1B[0m \x1B[37m[{T:>15.15}]\x1B[0m \x1B[36m{t:<60.60}\x1B[0m \x1B[37m:\x1B[0m {m}{n}")))
.build())))
.build(Root::builder().appender("stdout").build(level))
.unwrap())
.unwrap();
})
}};
}