init4_bin_base/utils/
tracing.rs1use crate::utils::{
2 from_env::FromEnvVar,
3 otlp::{OtelConfig, OtelGuard},
4};
5use tracing_subscriber::{filter::EnvFilter, layer::SubscriberExt, util::SubscriberInitExt, Layer};
6
7const TRACING_LOG_JSON: &str = "TRACING_LOG_JSON";
8
9macro_rules! install_fmt {
13 (json @ $registry:ident, $filter:ident) => {{
14 let fmt = tracing_subscriber::fmt::layer().json().with_filter($filter);
15 $registry.with(fmt).init();
16 }};
17 (log @ $registry:ident, $filter:ident) => {{
18 let fmt = tracing_subscriber::fmt::layer().with_filter($filter);
19 $registry.with(fmt).init();
20 }};
21 ($registry:ident) => {{
22 let json = bool::from_env_var(TRACING_LOG_JSON).unwrap_or(false);
23 let filter = EnvFilter::from_default_env();
24 if json {
25 install_fmt!(json @ $registry, filter);
26 } else {
27 install_fmt!(log @ $registry, filter);
28 }
29 }};
30}
31
32pub fn init_tracing() -> Option<OtelGuard> {
50 let registry = tracing_subscriber::registry();
51
52 if let Some(cfg) = OtelConfig::load() {
53 let guard = cfg.provider();
54 let registry = registry.with(guard.layer());
55 install_fmt!(registry);
56 Some(guard)
57 } else {
58 install_fmt!(registry);
59 None
60 }
61}