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 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}