blob: d810a0f95e7676992eb521482e4fec1ee9d9d21b [file] [log] [blame]
use {
crate::config::{get_config_bool, get_config_str},
crate::constants::{LOG_DIR, LOG_ENABLED},
simplelog::{
CombinedLogger, Config, ConfigBuilder, LevelFilter, TermLogger, TerminalMode, WriteLogger,
},
std::fs::OpenOptions,
};
fn debug_config() -> Config {
ConfigBuilder::new()
.set_target_level(LevelFilter::Info)
.add_filter_ignore_str("tokio_reactor")
.build()
}
async fn log_location(name: &str) -> String {
let log_file = format!("{}.log", name);
let mut log_dir = get_config_str(LOG_DIR, "").await;
if log_dir.len() > 0 && !log_dir.ends_with(std::path::MAIN_SEPARATOR) {
log_dir = format!("{}{}", log_dir, std::path::MAIN_SEPARATOR);
}
format!("{}{}", log_dir, log_file)
}
async fn is_enabled() -> bool {
get_config_bool(LOG_ENABLED, false).await
}
pub(crate) async fn setup_logger(name: &str) {
if !is_enabled().await {
return;
}
let file = OpenOptions::new()
.write(true)
.append(true)
.create(true)
.open(log_location(name).await)
.expect("could not open log file");
CombinedLogger::init(vec![
TermLogger::new(LevelFilter::Error, Config::default(), TerminalMode::Mixed)
.expect("could not initialize error logger"),
WriteLogger::new(LevelFilter::Debug, debug_config(), file),
])
.expect("could not initialize logs");
log::debug!("Logging configured");
}