use anyhow::{Context, Result};
use tracing_subscriber::{EnvFilter, fmt, prelude::*};
use crate::config::{LogConfig, LogFormat};
pub fn init(config: &LogConfig) -> Result<()> {
let filter = EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new(config.effective_filter()));
let registry = tracing_subscriber::registry().with(filter);
let result = match config.format {
LogFormat::Text => registry
.with(
fmt::layer()
.with_target(true)
.with_thread_ids(false)
.with_thread_names(false),
)
.try_init(),
LogFormat::Json => registry
.with(fmt::layer().json().with_target(true).flatten_event(true))
.try_init(),
LogFormat::Pretty => registry.with(fmt::layer().pretty()).try_init(),
};
result.context("tracing subscriber already initialized")
}