imlogger 0.1.5

A Simple Logger for Rust
Documentation
use chrono::Local;
use log::{Level, Log, Metadata, Record};

pub use log::{debug, error, info, warn, trace, LevelFilter};

pub struct ImLogger;

fn get_color(level: Level) -> &'static str {
    match level {
        Level::Error => "[31m",
        Level::Info => "[32m",
        Level::Debug => "[33m",
        Level::Warn => "[35m",
        Level::Trace => "[0m",
    }
}

impl Log for ImLogger {
    fn enabled(&self, metadata: &Metadata) -> bool {
        metadata.level() <= log::max_level()
    }
    fn log(&self, record: &Record) {
        if self.enabled(record.metadata()) {
            let ts = Local::now();
            let file: &str;
            #[cfg(debug_assertions)]
            {
                file = record.file().unwrap_or("<unknown>");
            }
            #[cfg(not(debug_assertions))]
            {
                file = "";
            }
            println!(
                "{} \x1B{}{:<5}\x1B[0m {} {} - {}",
                ts.format("%Y-%m-%dT%H:%M:%S%.3fZ"),
                get_color(record.level()),
                record.level(),
                file,
                record.module_path().unwrap_or("<unknown>"),
                record.args()
            )
        }
    }
    fn flush(&self) {}
}

static IMLOGGER: ImLogger = ImLogger {};

pub fn imloginit(level: LevelFilter) {
    log::set_logger(&IMLOGGER).unwrap();
    log::set_max_level(level);
}