use log::{debug, error, info, trace, warn, LevelFilter};
use std::sync::Once;
static INIT: Once = Once::new();
pub fn init_log(level: LevelFilter) {
INIT.call_once(|| {
env_logger::builder()
.format(|buf, record| {
use std::io::Write;
writeln!(
buf,
"{} [{}] {}",
chrono::Local::now().format("%Y-%m-%d %H:%M:%S%.3f"),
record.level(),
record.args()
)
})
.filter_level(level)
.init();
});
}
pub fn log_info(msg: &str) {
info!("{}", msg);
}
pub fn log_warn(msg: &str) {
warn!("{}", msg);
}
pub fn log_error(msg: &str) {
error!("{}", msg);
}
pub fn log_debug(msg: &str) {
debug!("{}", msg);
}
pub fn log_trace(msg: &str) {
trace!("{}", msg);
}
#[macro_export]
macro_rules! log_info {
($($arg:tt)*) => {
log::info!("{}", format!($($arg)*));
};
}
#[macro_export]
macro_rules! log_warn {
($($arg:tt)*) => {
log:: warn!("{}", format!($($arg)*));
};
}
#[macro_export]
macro_rules! log_error {
($($arg:tt)*) => {
log::error!("{}", format!($($arg)*));
};
}
#[macro_export]
macro_rules! log_debug {
($($arg:tt)*) => {
log::debug!("{}", format!($($arg)*));
};
}
#[macro_export]
macro_rules! log_trace {
($($arg:tt)*) => {
log::trace!("{}", format!($($arg)*));
};
}