1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use chrono::Local;
use env_logger::{Builder, Color};
use log::{set_max_level, Level, LevelFilter};
use std::io::Write;
use std::panic;
use std::process;

/// Initialize a new env_logger.
pub fn initialize_logger(your_module: &str) {
    Builder::new()
        .format(|buf, record| {
            let mut level_style = buf.style();

            match record.level() {
                Level::Error => {
                    level_style.set_color(Color::Red).set_bold(true);
                }
                Level::Warn => {
                    level_style.set_color(Color::Yellow);
                }
                Level::Info => {
                    level_style.set_color(Color::Cyan);
                }
                _ => {}
            };

            writeln!(
                buf,
                "{} [{}] - {}",
                Local::now().format("%Y-%m-%dT%H:%M:%S"),
                level_style.value(record.level()),
                record.args()
            )
        })
        .filter(None, LevelFilter::Off)
        .filter(Some(your_module), LevelFilter::Trace)
        .init();
    set_max_level(LevelFilter::Info);
}

/// Do nothing on panic as to not accidentally leak data.
pub fn disable_panic_msg() {
    panic::set_hook(Box::new(|_| {
        process::exit(1);
    }));
}