Skip to main content

prover_logger/
lib.rs

1use log::Log;
2use serde::{Deserialize, Serialize};
3use tracing_subscriber::{prelude::*, EnvFilter};
4
5pub mod log;
6
7/// The log format.
8#[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    // TODO: Support multiple outputs.
17    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}