1use log::Log;
2use serde::{Deserialize, Serialize};
3use tracing_subscriber::{prelude::*, EnvFilter};
4
5pub mod log;
6
7#[derive(Serialize, Deserialize, Debug, Default, Clone, Copy, PartialEq, Eq)]
9#[serde(rename_all = "lowercase")]
10pub enum LogFormat {
11 #[default]
12 Pretty,
13 Json,
14}
15pub fn tracing(config: &Log) {
16 let writer = config.outputs.first().cloned().unwrap_or_default();
18
19 let layer = match config.format {
20 LogFormat::Pretty => tracing_subscriber::fmt::layer()
21 .pretty()
22 .with_writer(writer.as_make_writer())
23 .with_filter(EnvFilter::try_from_default_env().unwrap_or_else(|_| config.level.into()))
24 .boxed(),
25
26 LogFormat::Json => tracing_subscriber::fmt::layer()
27 .json()
28 .with_writer(writer.as_make_writer())
29 .with_filter(EnvFilter::try_from_default_env().unwrap_or_else(|_| config.level.into()))
30 .boxed(),
31 };
32
33 tracing_subscriber::Registry::default().with(layer).init();
34}