use tracing_subscriber::fmt;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
#[derive(Debug, Clone, Copy)]
pub enum LogFormat {
Text,
Json,
}
#[derive(Debug, Clone, Copy)]
pub enum LogLevel {
Error,
Warn,
Info,
Debug,
Trace,
}
impl LogLevel {
fn as_filter(self) -> tracing_subscriber::filter::LevelFilter {
match self {
Self::Error => tracing_subscriber::filter::LevelFilter::ERROR,
Self::Warn => tracing_subscriber::filter::LevelFilter::WARN,
Self::Info => tracing_subscriber::filter::LevelFilter::INFO,
Self::Debug => tracing_subscriber::filter::LevelFilter::DEBUG,
Self::Trace => tracing_subscriber::filter::LevelFilter::TRACE,
}
}
}
pub fn init_logging(format: LogFormat, level: LogLevel) {
let filter = level.as_filter();
let registry = tracing_subscriber::registry().with(filter);
let result = match format {
LogFormat::Text => registry.with(fmt::layer()).try_init(),
LogFormat::Json => registry.with(fmt::layer().json()).try_init(),
};
drop(result);
}