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