1use std::time::SystemTime;
2
3use fern::colors::{Color, ColoredLevelConfig};
4
5pub fn setup_logger() -> Result<(), fern::InitError> {
6 fern::Dispatch::new()
7 .format(|out, message, record| {
8 let colors_line = ColoredLevelConfig::new()
9 .info(Color::Green)
10 .warn(Color::Yellow)
11 .error(Color::Red);
12 out.finish(format_args!(
13 "{} [{} {} {}] {}",
14 format_args!(
15 "\x1B[{}m",
16 colors_line.get_color(&record.level()).to_fg_str()
17 ),
18 humantime::format_rfc3339_seconds(SystemTime::now()),
19 record.level(),
20 record.target(),
21 message
22 ))
23 })
24 .level(log::LevelFilter::Debug)
25 .level_for("fairy", log::LevelFilter::Trace)
26 .level_for("fairy_common", log::LevelFilter::Trace)
27 .level_for("fairy_fuse", log::LevelFilter::Trace)
28 .chain(std::io::stdout())
29 .chain(fern::log_file("output.log")?)
30 .apply()?;
31 Ok(())
32}