anvil_core/
tracing_init.rs1use tracing_subscriber::{fmt, prelude::*, EnvFilter};
4
5#[derive(Debug, Clone, Copy)]
6pub enum LogFormat {
7 Pretty,
8 Json,
9}
10
11pub fn init() {
12 let format = std::env::var("LOG_FORMAT").unwrap_or_else(|_| "pretty".to_string());
13 let format = match format.as_str() {
14 "json" => LogFormat::Json,
15 _ => LogFormat::Pretty,
16 };
17 init_with(format);
18}
19
20pub fn init_with(format: LogFormat) {
21 let filter = EnvFilter::try_from_env("LOG_LEVEL")
22 .or_else(|_| EnvFilter::try_new("info,sqlx=warn,hyper=warn,tower_http=info"))
23 .unwrap();
24
25 match format {
26 LogFormat::Json => {
27 let subscriber = tracing_subscriber::registry()
28 .with(filter)
29 .with(fmt::layer().json());
30 let _ = subscriber.try_init();
31 }
32 LogFormat::Pretty => {
33 let subscriber = tracing_subscriber::registry()
34 .with(filter)
35 .with(fmt::layer().pretty().with_target(false));
36 let _ = subscriber.try_init();
37 }
38 }
39}