static_web_server/
logger.rs1use tracing::Level;
10use tracing_subscriber::{filter::Targets, fmt::format::FmtSpan, prelude::*};
11
12use crate::{Context, Result};
13
14pub fn init(log_level: &str, log_with_ansi: bool) -> Result {
16 let log_level = log_level.to_lowercase();
17
18 configure(&log_level, log_with_ansi).with_context(|| "failed to initialize logging")?;
19
20 Ok(())
21}
22
23fn configure(level: &str, enable_ansi: bool) -> Result {
25 let level = level
26 .parse::<Level>()
27 .with_context(|| "failed to parse log level")?;
28
29 let filtered_layer = tracing_subscriber::fmt::layer()
30 .with_writer(std::io::stderr)
31 .with_span_events(FmtSpan::CLOSE)
32 .with_ansi(enable_ansi)
33 .with_filter(Targets::default().with_default(level));
34
35 match tracing_subscriber::registry()
36 .with(filtered_layer)
37 .try_init()
38 {
39 Err(err) => Err(anyhow!(err)),
40 _ => Ok(()),
41 }
42}