1#![warn(missing_docs)]
2#![warn(clippy::std_instead_of_core)]
3#![warn(clippy::std_instead_of_alloc)]
4#![forbid(unsafe_code)]
5#![doc = include_str!("../README.md")]
6
7use log::{Level, LevelFilter, Log, Metadata, Record};
8use std::io::Write;
9use yansi::{Paint as _, Style};
10
11struct SimpleLogger;
12
13impl Log for SimpleLogger {
14 fn enabled(&self, _metadata: &Metadata) -> bool {
15 true
16 }
17
18 fn log(&self, record: &Record) {
19 let level_style = match record.level() {
21 Level::Error => Style::new().rgb(243, 139, 168), Level::Warn => Style::new().rgb(249, 226, 175), Level::Info => Style::new().rgb(166, 227, 161), Level::Debug => Style::new().rgb(137, 180, 250), Level::Trace => Style::new().rgb(148, 226, 213), };
27
28 let level = record.level();
30
31 eprintln!(
32 "{} - {}: {}",
33 level.paint(level_style),
34 record.target().blue(),
35 record.args()
36 );
37 }
38
39 fn flush(&self) {
40 let _ = std::io::stderr().flush();
41 }
42}
43
44pub fn setup() {
46 #[cfg(not(miri))]
47 color_eyre::install().expect("Failed to set up color-eyre");
48 #[cfg(not(miri))]
49 color_backtrace::install();
50
51 let logger = Box::new(SimpleLogger);
52 _ = log::set_boxed_logger(logger);
53 log::set_max_level(LevelFilter::Trace);
54}