Skip to main content

lunar_lib/log/
cli_logger.rs

1use std::{
2    fmt::Arguments,
3    io::{self, Write},
4};
5
6use crate::log::{Log, LogLevel};
7
8/// A basic default implementation of a [`Log`] for CLI applications
9#[derive(Debug)]
10pub struct CliLogger;
11
12impl Log for CliLogger {
13    fn log_unchecked(&self, level: LogLevel, msg: Arguments) {
14        let output: &mut dyn Write = match level {
15            LogLevel::Error | LogLevel::Warn => &mut io::stderr(),
16            _ => &mut io::stdout(),
17        };
18
19        match level {
20            LogLevel::Info => {}
21            _ => {
22                let _ = write!(output, "[{level}]: ");
23            }
24        }
25        let _ = output.write_fmt(msg);
26        let _ = output.write(b"\n");
27    }
28}