use log::LevelFilter;
use log4rs::{
append::console::{ConsoleAppender, Target},
config::{Appender, Config, Root},
filter::threshold::ThresholdFilter,
};
use std::sync::{Mutex, Once};
static INIT: Once = Once::new();
pub fn init_logging() {
INIT.call_once(|| {
let stdout = ConsoleAppender::builder().target(Target::Stdout).build();
let config = Config::builder()
.appender(
Appender::builder()
.filter(Box::new(ThresholdFilter::new(LevelFilter::Info)))
.build("stdout", Box::new(stdout)),
)
.build(Root::builder().appender("stdout").build(LevelFilter::Info))
.unwrap();
match log4rs::init_config(config) {
Ok(_) => log::info!("RelayRL logging initialized with default configuration"),
Err(e) => eprintln!("Failed to initialize RelayRL logging: {}", e),
}
});
}
#[allow(unused)]
pub fn init_logging_from_file(config_path: &str) -> Result<(), String> {
let result = Mutex::new(Ok(()));
INIT.call_once(
|| match log4rs::init_file(config_path, Default::default()) {
Ok(_) => log::info!(
"RelayRL logging initialized from config file: {}",
config_path
),
Err(e) => {
let mut result_guard = result.lock().unwrap();
*result_guard = Err(format!("Failed to initialize logging: {}", e));
}
},
);
result.into_inner().unwrap()
}