facet_testhelpers/
lib.rs

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        // Create style based on log level
20        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        // Convert level to styled display
29        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
44/// Installs color-backtrace (except on miri), and sets up a simple logger.
45pub 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}