pars_core/util/
log.rs

1use chrono::Local;
2use lazy_static::lazy_static;
3use log::{debug, LevelFilter, Log, Metadata, Record};
4use parking_lot::RwLock;
5
6lazy_static! {
7    static ref LOG_LEVEL: RwLock<LevelFilter> = RwLock::new(LevelFilter::Info);
8}
9
10struct DynamicLogger;
11
12impl Log for DynamicLogger {
13    fn enabled(&self, metadata: &Metadata) -> bool {
14        metadata.level() <= *LOG_LEVEL.read()
15    }
16
17    fn log(&self, record: &Record) {
18        if self.enabled(record.metadata()) {
19            let now = Local::now();
20            println!(
21                "[{}] [{}] - {}",
22                now.format("%Y-%m-%d %H:%M:%S"),
23                record.level(),
24                record.args()
25            );
26        }
27    }
28
29    fn flush(&self) {}
30}
31
32pub fn init_logger() {
33    log::set_logger(&DynamicLogger).unwrap();
34    log::set_max_level(LevelFilter::Trace);
35}
36
37pub fn set_log_level(level: LevelFilter) {
38    *LOG_LEVEL.write() = level;
39    debug!("Log level set to {:?}!", level);
40}
41
42pub fn init_debug_logger() {
43    init_logger();
44    set_log_level(LevelFilter::Debug);
45}