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 facet_ansi::{ColorStyle, Style, Stylize};
8use log::{Level, LevelFilter, Log, Metadata, Record};
9use std::io::Write;
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().fg_red(),
22 Level::Warn => Style::new().fg_yellow(),
23 Level::Info => Style::new().fg_green(),
24 Level::Debug => Style::new().fg_cyan(),
25 Level::Trace => Style::new().dimmed(),
26 };
27
28 let styled_level = record.level().style(level_style);
30
31 eprintln!(
32 "{} - {}: {}",
33 styled_level,
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_backtrace::install();
48 let logger = Box::new(SimpleLogger);
49 _ = log::set_boxed_logger(logger);
50 log::set_max_level(LevelFilter::Trace);
51}