1use tracing::level_filters::LevelFilter;
2use tracing_subscriber::{EnvFilter, Layer, fmt, layer::SubscriberExt, util::SubscriberInitExt};
3
4pub fn init(verbose: bool) {
10 let filter = EnvFilter::try_from_default_env()
11 .unwrap_or_else(|_| EnvFilter::new(LevelFilter::INFO.to_string()));
12
13 let stdout_layer = fmt::layer().with_target(false).with_filter(filter.clone());
14
15 #[cfg(debug_assertions)]
16 {
17 let _ = verbose;
18 tracing_subscriber::registry().with(stdout_layer).init();
19 }
20
21 #[cfg(not(debug_assertions))]
22 {
23 use crate::{APP_DATA_DIR, APP_NAME};
24 use tracing_appender::rolling;
25
26 std::fs::create_dir_all(APP_DATA_DIR.as_path()).ok();
27
28 let file_appender = rolling::daily(
29 APP_DATA_DIR.as_path(),
30 format!("{}.log", APP_NAME.to_lowercase()),
31 );
32 let file_layer = fmt::layer()
33 .with_ansi(false)
34 .with_target(false)
35 .with_writer(file_appender)
36 .with_filter(filter);
37
38 if verbose {
39 tracing_subscriber::registry()
40 .with(file_layer)
41 .with(stdout_layer)
42 .init();
43 } else {
44 tracing_subscriber::registry().with(file_layer).init();
45 }
46 }
47}
48
49pub fn init_stdout() {
50 let filter = EnvFilter::try_from_default_env()
51 .unwrap_or_else(|_| EnvFilter::new(LevelFilter::INFO.to_string()));
52
53 let stdout_layer = fmt::layer().with_target(false).with_filter(filter.clone());
54
55 tracing_subscriber::registry().with(stdout_layer).init();
56}