rustout/
lib.rs

1use ansi_term::Colour;
2use log::{Level, LevelFilter, Metadata, Record};
3
4pub struct RustOut;
5
6impl log::Log for RustOut {
7    fn enabled(&self, metadata: &Metadata) -> bool {
8        metadata.level() <= Level::Trace
9    }
10
11    fn log(&self, record: &Record) {
12        if self.enabled(record.metadata()) {
13            let level_str = match record.level() {
14                Level::Error => Colour::Red.bold().paint("ERROR"),
15                Level::Warn => Colour::Yellow.bold().paint("WARN"),
16                Level::Info => Colour::Green.bold().paint("INFO"),
17                Level::Debug => Colour::Blue.bold().paint("DEBUG"),
18                Level::Trace => Colour::Purple.bold().paint("TRACE"),
19            };
20
21            let message = format!("{} → {}", level_str, record.args());
22
23            println!("{}", message);
24        }
25    }
26
27    fn flush(&self) {}
28}
29
30/// Initializes the Rustout logger with the desired log level filter.
31pub fn init_logger(log_level: LevelFilter) {
32    log::set_logger(&RustOut).unwrap();
33    log::set_max_level(log_level);
34}
35
36pub fn main() {
37    init_logger(LevelFilter::Trace);
38    log::error!("This is an error message");
39    log::warn!("This is a warning message");
40    log::info!("This is an info message");
41    log::debug!("This is a debug message");
42    log::trace!("This is a trace message");
43}