39 lines
1.3 KiB
Rust
39 lines
1.3 KiB
Rust
use once_cell::sync::OnceCell;
|
|
use ops_sat_rs::config::LOG_FOLDER;
|
|
use std::path::{Path, PathBuf};
|
|
|
|
pub static LOGFILE_PATH: OnceCell<PathBuf> = OnceCell::new();
|
|
|
|
pub fn setup_logger() -> Result<(), fern::InitError> {
|
|
if !Path::new(LOG_FOLDER).exists() && std::fs::create_dir_all(LOG_FOLDER).is_err() {
|
|
eprintln!("Failed to create log folder '{}'", LOG_FOLDER);
|
|
}
|
|
let mut path_buf = PathBuf::from(LOG_FOLDER);
|
|
path_buf.push(
|
|
format!(
|
|
"output_{}.log",
|
|
humantime::format_rfc3339_seconds(std::time::SystemTime::now()).to_string()
|
|
)
|
|
.replace(":", "_"),
|
|
);
|
|
println!("Creating logfile {:?}", path_buf);
|
|
LOGFILE_PATH
|
|
.set(path_buf.clone())
|
|
.expect("Error setting global logfile path");
|
|
fern::Dispatch::new()
|
|
.format(move |out, message, record| {
|
|
out.finish(format_args!(
|
|
"[{}][{}][{}] {}",
|
|
humantime::format_rfc3339_millis(std::time::SystemTime::now()),
|
|
std::thread::current().name().unwrap_or("unnamed_thread"),
|
|
record.level(),
|
|
message
|
|
))
|
|
})
|
|
.level(log::LevelFilter::Debug)
|
|
.chain(std::io::stdout())
|
|
.chain(fern::log_file(path_buf.as_os_str())?)
|
|
.apply()?;
|
|
Ok(())
|
|
}
|