1use tracing_subscriber::EnvFilter;
2use tracing_subscriber::fmt;
3use tracing_subscriber::prelude::*;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum LogFormat {
8 Human,
10 Json,
12}
13
14pub fn init(format: LogFormat) {
19 let env_filter =
20 EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("mvm=info,warn"));
21
22 match format {
23 LogFormat::Human => {
24 let subscriber = fmt::layer()
25 .with_target(false)
26 .with_thread_ids(false)
27 .compact();
28 tracing_subscriber::registry()
29 .with(env_filter)
30 .with(subscriber)
31 .init();
32 }
33 LogFormat::Json => {
34 let subscriber = fmt::layer().json().with_target(true);
35 tracing_subscriber::registry()
36 .with(env_filter)
37 .with(subscriber)
38 .init();
39 }
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_log_format_equality() {
49 assert_eq!(LogFormat::Human, LogFormat::Human);
50 assert_eq!(LogFormat::Json, LogFormat::Json);
51 assert_ne!(LogFormat::Human, LogFormat::Json);
52 }
53}