Skip to main content

jrny/
logger.rs

1//! Basic implementation of a Log, as none of the complexity of
2//! common crates is particularly necessary here.
3//! See: https://docs.rs/log/0.4.11/log/#implementing-a-logger
4use log::{Level, Log, Metadata, Record};
5use std::io::Write;
6use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor};
7
8pub struct Logger;
9
10impl Log for Logger {
11    fn enabled(&self, metadata: &Metadata) -> bool {
12        metadata.level() <= Level::Info
13    }
14
15    fn log(&self, record: &Record) {
16        if !self.enabled(record.metadata()) {
17            return;
18        }
19
20        if record.metadata().level() == Level::Warn {
21            let mut stderr = StandardStream::stderr(ColorChoice::Always);
22
23            stderr
24                .set_color(ColorSpec::new().set_fg(Some(Color::Red)))
25                .unwrap();
26            write!(&mut stderr, "{}", record.args()).unwrap();
27
28            stderr.set_color(ColorSpec::new().set_fg(None)).unwrap();
29            writeln!(&mut stderr).unwrap();
30
31            return;
32        }
33
34        println!("{}", record.args());
35    }
36
37    fn flush(&self) {}
38}