use crate::configuration::{FusionConfig, LogWriterType};
use tracing::info;
use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
pub fn init_trace(c: &FusionConfig) {
if !c.trace().enable {
return;
}
let rust_log = std::env::var("RUST_LOG");
if rust_log.is_err() || rust_log.is_ok_and(|s| s.is_empty()) {
std::env::set_var("RUST_LOG", c.trace().log_level.to_string());
}
let formater = tracing_subscriber::fmt::format()
.compact()
.with_file(true)
.with_line_number(true)
.with_thread_ids(true)
.with_thread_names(true)
.with_target(c.trace().target);
let registry = tracing_subscriber::registry().with(EnvFilter::from_default_env());
let fmt_layer = fmt::layer().event_format(formater);
if LogWriterType::Console == c.trace().log_writer {
registry.with(fmt_layer).init();
} else {
#[cfg(feature = "tracing-appender")]
{
let r = registry.with(fmt_layer.with_writer(init_log_appender(c)));
r.init();
}
#[cfg(not(feature = "tracing-appender"))]
{
let r = registry.with(fmt_layer);
r.init();
}
}
info!("Loaded the FusionConfig is:\n{}", toml::to_string(c).unwrap());
}
#[cfg(feature = "tracing-appender")]
pub fn init_log_appender(c: &FusionConfig) -> tracing_appender::rolling::RollingFileAppender {
use std::path::Path;
let path = Path::new(&c.trace().log_dir);
let file_appender = tracing_appender::rolling::daily(path, &c.app().name);
file_appender
}