1use facet_ansi::{ColorStyle, Style, Stylize};
2use log::{Level, LevelFilter, Log, Metadata, Record};
3use std::io::Write;
4
5struct SimpleLogger;
6
7impl Log for SimpleLogger {
8 fn enabled(&self, _metadata: &Metadata) -> bool {
9 true
10 }
11
12 fn log(&self, record: &Record) {
13 let level_style = match record.level() {
15 Level::Error => Style::new().with_red(),
16 Level::Warn => Style::new().with_yellow(),
17 Level::Info => Style::new().with_green(),
18 Level::Debug => Style::new().with_cyan(),
19 Level::Trace => Style::new().dimmed(),
20 };
21
22 let styled_level = record.level().style(level_style);
24
25 eprintln!(
26 "{} - {}: {}",
27 styled_level,
28 record.target().blue(),
29 record.args()
30 );
31 }
32
33 fn flush(&self) {
34 let _ = std::io::stderr().flush();
35 }
36}
37
38pub fn setup() {
39 #[cfg(not(miri))]
40 color_backtrace::install();
41 let logger = Box::new(SimpleLogger);
42 _ = log::set_boxed_logger(logger);
43 log::set_max_level(LevelFilter::Trace);
44}