Skip to main content

inlog/
lib.rs

1mod colours;
2
3use log::{Level, LevelFilter, Metadata, Record};
4use crate::colours::colour_format;
5
6struct Analog;
7
8impl log::Log for Analog {
9    fn enabled(&self, metadata: &Metadata) -> bool {
10        log::set_max_level(LevelFilter::Debug);
11        metadata.level() <= Level::Debug
12    }
13
14    fn log(&self, record: &Record) {
15        // Guard for if logger is enabled
16        if !self.enabled(record.metadata()) {
17            return;
18        }
19
20        let level = record.level();
21
22        let colour = match level {
23            Level::Trace => colours::LIGHT_BLUE,
24            Level::Debug => colours::BLUE,
25            Level::Info => colours::GREEN,
26            Level::Warn => colours::YELLOW,
27            Level::Error => colours::RED,
28        };
29
30        println!(
31            "{} {}",
32            colour_format(colour, &format!("[ {:5} ]", level)),
33            record.args()
34        );
35    }
36
37    fn flush(&self) {}
38}
39
40static LOGGER: Analog = Analog;
41
42pub fn init(filter: LevelFilter) {
43    log::set_logger(&LOGGER)
44        .map(|()| log::set_max_level(filter))
45        .expect("The logger couldn't be set. Quitting.");
46}