summaryrefslogtreecommitdiff
path: root/src/systems/debug/verbose_logger.rs
blob: 882e53d5c9ef23307c67285468c8b2d0eba526a8 (plain)
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
use chrono::Local;
use env_logger::Builder;
use log::Level;
use rust_i18n::t;
use std::io::Write;

pub fn init_verbose_logger(level_filter: Option<log::LevelFilter>) {
    let mut builder = match level_filter {
        Some(f) => {
            let mut b = Builder::new();
            b.filter_level(f);
            b
        }
        None => return,
    };

    builder
        .format(|buf, record| {
            let now = Local::now();
            let timestamp = now.format("%y-%-m-%-d %H:%M:%S");
            let level = record.level();
            let args = record.args();

            let (prefix, color_code) = match level {
                Level::Error => (t!("logger.error").trim().to_string(), "\x1b[31m"),
                Level::Warn => (t!("logger.warn").trim().to_string(), "\x1b[33m"),
                Level::Info => (t!("logger.info").trim().to_string(), "\x1b[37m"),
                Level::Debug => (t!("logger.debug").trim().to_string(), "\x1b[90m"),
                Level::Trace => (t!("logger.trace").trim().to_string(), "\x1b[36m"),
            };

            let colored_prefix = if prefix.is_empty() {
                String::new()
            } else {
                format!("{}[{}] {}: \x1b[0m", color_code, timestamp, prefix)
            };

            writeln!(buf, "{}{}", colored_prefix, args)
        })
        .init();
}