use std::fs;
use std::path::PathBuf;
use fern::colors::{Color, ColoredLevelConfig};
use crate::dirs;
pub fn setup_logger(testing: bool) -> Result<(), fern::InitError> {
let mut logfile_path: PathBuf =
dirs::get_log_dir().expect("Unable to get log dir to store logs in");
fs::create_dir_all(logfile_path.clone()).expect("Unable to create folder for logs");
logfile_path.push(
chrono::Local::now()
.format(if !testing {
"aw-server_%Y-%m-%dT%H-%M-%S%z.log"
} else {
"aw-server-testing_%Y-%m-%dT%H-%M-%S%z.log"
})
.to_string(),
);
let colors = ColoredLevelConfig::new()
.debug(Color::White)
.info(Color::Green)
.warn(Color::Yellow)
.error(Color::Red);
fern::Dispatch::new()
.level(log::LevelFilter::Info)
.level_for("rocket", log::LevelFilter::Warn)
.level_for("_", log::LevelFilter::Warn) .level_for("launch_", log::LevelFilter::Warn) .format(move |out, message, record| {
out.finish(format_args!(
"[{}][{}][{}]: {}",
chrono::Local::now().format("%Y-%m-%d %H:%M:%S"),
colors.color(record.level()),
record.target(),
message,
))
})
.chain(fern::Dispatch::new().chain(std::io::stdout()))
.chain(
fern::Dispatch::new()
.format(|out, message, _record| {
out.finish(format_args!(
"{}",
message,
))
})
.chain(fern::log_file(logfile_path)?),
)
.apply()?;
Ok(())
}
#[test]
fn test_setup_logger() {
setup_logger(true).unwrap();
}