use tracing_subscriber::EnvFilter;
use tracing_subscriber::fmt;
use tracing_subscriber::prelude::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LogFormat {
Human,
Json,
}
pub fn init(format: LogFormat) {
let env_filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("mvm=info,warn"));
match format {
LogFormat::Human => {
let subscriber = fmt::layer()
.with_target(false)
.with_thread_ids(false)
.compact();
tracing_subscriber::registry()
.with(env_filter)
.with(subscriber)
.init();
}
LogFormat::Json => {
let subscriber = fmt::layer().json().with_target(true);
tracing_subscriber::registry()
.with(env_filter)
.with(subscriber)
.init();
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_log_format_equality() {
assert_eq!(LogFormat::Human, LogFormat::Human);
assert_eq!(LogFormat::Json, LogFormat::Json);
assert_ne!(LogFormat::Human, LogFormat::Json);
}
}