mod log;
extern crate time;
extern crate tracing;
extern crate tracing_subscriber;
use std::sync::OnceLock;
pub use tracing::{debug, error, info, span, trace, warn, Level};
static LOG: OnceLock<(
Box<dyn Fn(Level) + Send + Sync + 'static>,
tracing_appender::non_blocking::WorkerGuard,
)> = OnceLock::new();
pub struct Options {
pub level: Level,
pub set_file: String,
pub time_format: String,
}
impl Default for Options {
fn default() -> Self {
Self {
level: Level::WARN,
set_file: "".to_string(),
time_format: "[year]-[month]-[day] [hour repr:24]:[minute]:[second]".to_string(),
}
}
}
pub fn init<T: Into<Option<Options>>>(options: T) {
let mut options = options.into();
if options.is_none() {
options = Some(Options::default());
}
let options = options.unwrap();
let set_file = options.set_file;
let (reload_handle, _) = LOG.get_or_init(|| log::init_log(true, set_file, options.time_format));
let level = options.level;
reload_handle(level.into());
}