1use tracing_subscriber::fmt::format::FmtSpan;
4use tracing_subscriber::EnvFilter;
5use tracing_appender::rolling::{RollingFileAppender, Rotation};
6
7pub fn init(config: &alun_config::LogConfig) {
18 let level = &config.level;
19 let filter = EnvFilter::try_from_default_env()
20 .unwrap_or_else(|_| EnvFilter::new(format!("alun={}", level)));
21
22 let format = config.format.as_str();
23
24 if format == "json" {
26 let subscriber = tracing_subscriber::fmt()
27 .with_env_filter(filter)
28 .with_span_events(FmtSpan::CLOSE)
29 .json();
30
31 if let Some(dir) = &config.dir {
32 let file_appender = RollingFileAppender::new(Rotation::DAILY, dir, &config.file_prefix);
33 let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);
34 let _ = subscriber.with_writer(non_blocking).try_init();
35 } else {
36 let _ = subscriber.try_init();
37 }
38 } else {
39 let subscriber = tracing_subscriber::fmt()
40 .with_env_filter(filter)
41 .with_span_events(FmtSpan::CLOSE);
42
43 if let Some(dir) = &config.dir {
44 let file_appender = RollingFileAppender::new(Rotation::DAILY, dir, &config.file_prefix);
45 let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);
46 let _ = subscriber.with_writer(non_blocking).try_init();
47 } else {
48 let _ = subscriber.try_init();
49 }
50 }
51}