use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
pub fn init_logging(filter: Option<&str>) {
let mut env_filter = EnvFilter::from_default_env();
if filter.is_some() && std::env::var("RUST_LOG").is_err() {
if let Some(f) = filter {
env_filter = EnvFilter::new(f);
}
}
if std::env::var("RUST_LOG").is_err() && filter.is_none() {
env_filter = EnvFilter::new("info");
}
let _ = tracing_subscriber::registry()
.with(
fmt::layer()
.with_target(true) .with_thread_ids(false) .with_ansi(std::env::var("NO_COLOR").is_err()), )
.with(env_filter)
.try_init();
}
pub fn init_module_logging(module_name: &str, filter: Option<&str>) {
let mut env_filter = EnvFilter::from_default_env();
let default_filter = format!("{}={},blvm_node::module=debug", module_name, "info");
if std::env::var("RUST_LOG").is_err() {
env_filter = filter
.map(EnvFilter::new)
.unwrap_or_else(|| EnvFilter::new(&default_filter));
}
let _ = tracing_subscriber::registry()
.with(
fmt::layer()
.with_target(true) .with_thread_ids(false) .with_ansi(std::env::var("NO_COLOR").is_err()), )
.with(env_filter)
.try_init();
}
#[cfg(feature = "json-logging")]
pub fn init_json_logging(filter: Option<&str>) {
let mut env_filter = EnvFilter::from_default_env();
if filter.is_some() && std::env::var("RUST_LOG").is_err() {
if let Some(f) = filter {
env_filter = EnvFilter::new(f);
}
}
if std::env::var("RUST_LOG").is_err() && filter.is_none() {
env_filter = EnvFilter::new("info");
}
let _ = tracing_subscriber::registry()
.with(
fmt::layer().with_target(true), )
.with(env_filter)
.try_init();
}
pub fn init_logging_from_config(config: Option<&crate::config::LoggingConfig>) {
let filter = config.and_then(|c| c.filter.as_deref());
if config.map(|c| c.json_format).unwrap_or(false) {
#[cfg(feature = "json-logging")]
{
init_json_logging(filter);
}
#[cfg(not(feature = "json-logging"))]
{
init_logging(filter);
}
} else {
init_logging(filter);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_logging_initialization() {
let _init_logging_fn: fn(Option<&str>) = init_logging;
let _init_module_logging_fn: fn(&str, Option<&str>) = init_module_logging;
let _init_logging_from_config_fn: fn(Option<&crate::config::LoggingConfig>) =
init_logging_from_config;
#[cfg(feature = "json-logging")]
{
let _init_json_logging_fn: fn(Option<&str>) = init_json_logging;
}
}
}