Skip to main content

dot/
logger.rs

1use log::{Level, LevelFilter, Log, Metadata, Record};
2use owo_colors::OwoColorize;
3use owo_colors::Stream::{Stderr, Stdout};
4use owo_colors::Style;
5
6pub struct CliLogger;
7
8impl Log for CliLogger {
9    fn enabled(&self, metadata: &Metadata) -> bool {
10        metadata.level() <= log::max_level()
11    }
12
13    fn log(&self, record: &Record) {
14        if !self.enabled(record.metadata()) {
15            return;
16        }
17        match record.level() {
18            Level::Error => eprintln!(
19                "{} {}",
20                "error:".if_supports_color(Stderr, |t| t.style(Style::new().red().bold())),
21                record.args()
22            ),
23            Level::Warn => eprintln!(
24                "{} {}",
25                "warning:".if_supports_color(Stderr, |t| t.style(Style::new().yellow().bold())),
26                record.args()
27            ),
28            Level::Info => println!("{}", record.args()),
29            Level::Debug | Level::Trace => println!(
30                "{} {}",
31                "debug:".if_supports_color(Stdout, |t| t.style(Style::new().dimmed())),
32                record.args()
33            ),
34        }
35    }
36
37    fn flush(&self) {}
38}
39
40static LOGGER: CliLogger = CliLogger;
41
42pub fn init(level: LevelFilter) {
43    log::set_logger(&LOGGER).unwrap();
44    log::set_max_level(level);
45}