use crate::Result; use figment::Provider; use std::{fs::File, sync::Arc}; use tracing::metadata::LevelFilter; use tracing_subscriber::{prelude::*, Layer}; pub use config::Config; pub use level::Level; mod config; mod level; pub fn init_from_provider(provider: T) -> Result<()> { let config = Config::extract(&provider)?; let stdout_layer = tracing_subscriber::fmt::layer() .pretty() .with_filter(LevelFilter::from(config.level)); let log_layer = if config.level.is_some() { let file = File::create(&config.path)?; tracing_subscriber::fmt::layer() .with_writer(Arc::new(file)) .with_filter(LevelFilter::from(config.level)) .into() } else { None }; tracing_subscriber::registry() .with(stdout_layer) .with(log_layer) .init(); Ok(()) }