Skip to main content

anvil_core/
tracing_init.rs

1//! Tracing initialization. JSON output in prod, pretty in dev.
2
3use 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}