use tracing_subscriber::{EnvFilter, layer::SubscriberExt, util::SubscriberInitExt};
pub fn init_tracing(log_level: &str, json: bool) {
if json {
let _ = tracing_subscriber::registry()
.with(EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(log_level)))
.with(tracing_subscriber::fmt::layer().json())
.try_init();
} else {
let _ = tracing_subscriber::registry()
.with(EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(log_level)))
.with(tracing_subscriber::fmt::layer())
.try_init();
}
}
pub fn init_json_tracing(log_level: &str) {
init_tracing(log_level, true);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn init_tracing_plain_is_idempotent() {
init_tracing("info", false);
init_tracing("debug", false); init_tracing("warn", false); }
#[test]
fn init_tracing_json_is_idempotent() {
init_tracing("info", true);
init_tracing("debug", true); }
#[test]
fn init_json_tracing_is_idempotent() {
init_json_tracing("info");
init_json_tracing("info"); }
#[test]
fn init_json_tracing_delegates_to_init_tracing() {
init_json_tracing("warn");
init_tracing("warn", true);
}
}