use fern::colors::{Color, ColoredLevelConfig};
use log::LevelFilter;
pub(crate) fn init(debug: bool) -> Result<(), log::SetLoggerError> {
let level = if debug {
LevelFilter::Debug
} else {
LevelFilter::Info
};
let line_colors = ColoredLevelConfig::new()
.error(Color::Red)
.warn(Color::Yellow)
.info(Color::BrightBlack)
.debug(Color::BrightBlack)
.trace(Color::BrightBlack);
let level_colors = line_colors.info(Color::Green).debug(Color::Black);
fern::Dispatch::new()
.format(move |out, message, record| {
out.finish(format_args!(
"{color_line}[{target}][{level}{color_line}] {message}\x1B[0m",
color_line = format_args!(
"\x1B[{}m",
line_colors.get_color(&record.level()).to_fg_str()
),
target = record.target(),
level = level_colors.color(record.level()),
message = message,
));
})
.level(level)
.chain(std::io::stderr())
.apply()
}