static_web_server/
logger.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2// This file is part of Static Web Server.
3// See https://static-web-server.net/ for more information
4// Copyright (C) 2019-present Jose Quintana <joseluisq.net>
5
6//! Provides logging initialization for the web server.
7//!
8
9use tracing::Level;
10use tracing_subscriber::{filter::Targets, fmt::format::FmtSpan, prelude::*};
11
12use crate::{Context, Result};
13
14/// Logging system initialization
15pub 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
23/// Initialize logging builder with its levels.
24fn 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}