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