1use anyhow::Result;
2use colored::Colorize;
3
4pub fn setup_logger(log_level: log::LevelFilter) -> Result<()> {
5 fern::Dispatch::new()
6 .format(|out, message, record| {
7 let level = record.level().as_str();
8 let module = record.target().split("::").next().unwrap_or_default();
9 let message = message.to_string();
10 let fmt_string = match record.level() {
11 log::Level::Error => {
12 format!("{:6}| {} - {}", level.red(), module.green(), message.red())
13 }
14 log::Level::Warn => format!(
15 "{:6}| {} - {}",
16 level.bright_yellow(),
17 module.green(),
18 message.bright_yellow()
19 ),
20 log::Level::Info => format!(
21 "{:6}| {} - {}",
22 level.blue(),
23 module.green(),
24 message.blue()
25 ),
26 log::Level::Debug => {
27 format!(
28 "{:6}| {} - {}",
29 level.magenta(),
30 module.green(),
31 message.magenta()
32 )
33 }
34 log::Level::Trace => {
35 format!("{:6}| {}", level.bright_black(), message.bright_black())
36 }
37 };
38 out.finish(format_args!("{}", fmt_string))
39 })
40 .level(log_level)
41 .chain(std::io::stdout())
42 .apply()?;
43 Ok(())
44}