use tracing_subscriber::fmt::format::FmtSpan;
use tracing_subscriber::EnvFilter;
use tracing_appender::rolling::{RollingFileAppender, Rotation};
pub fn init(config: &alun_config::LogConfig) {
let level = &config.level;
let filter = EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new(format!("alun={}", level)));
let format = config.format.as_str();
if format == "json" {
let subscriber = tracing_subscriber::fmt()
.with_env_filter(filter)
.with_span_events(FmtSpan::CLOSE)
.json();
if let Some(dir) = &config.dir {
let file_appender = RollingFileAppender::new(Rotation::DAILY, dir, &config.file_prefix);
let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);
let _ = subscriber.with_writer(non_blocking).try_init();
} else {
let _ = subscriber.try_init();
}
} else {
let subscriber = tracing_subscriber::fmt()
.with_env_filter(filter)
.with_span_events(FmtSpan::CLOSE);
if let Some(dir) = &config.dir {
let file_appender = RollingFileAppender::new(Rotation::DAILY, dir, &config.file_prefix);
let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);
let _ = subscriber.with_writer(non_blocking).try_init();
} else {
let _ = subscriber.try_init();
}
}
}