zlsrs 0.0.2

Rust 标准库扩展工具集,提供更便捷的使用方式
Documentation
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 enum TimeFormat {
//     Date = "[year]-[month]-[day]",
//     Time = "[hour repr:24]:[minute]:[second]",
//     MicroSeconds = "[year]-[month]-[day] [hour repr:24]:[minute]:[second].[millisecond]",
// }

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());
}