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) -> Result {
16    let log_level = log_level.to_lowercase();
17
18    configure(&log_level).with_context(|| "failed to initialize logging")?;
19
20    Ok(())
21}
22
23/// Initialize logging builder with its levels.
24fn configure(level: &str) -> Result {
25    let level = level
26        .parse::<Level>()
27        .with_context(|| "failed to parse log level")?;
28
29    #[cfg(not(windows))]
30    let enable_ansi = true;
31    #[cfg(windows)]
32    let enable_ansi = false;
33
34    let filtered_layer = tracing_subscriber::fmt::layer()
35        .with_writer(std::io::stderr)
36        .with_span_events(FmtSpan::CLOSE)
37        .with_ansi(enable_ansi)
38        .with_filter(
39            Targets::default()
40                .with_default(level)
41                .with_target("static_web_server::info", Level::INFO)
42                .with_target("static_web_server::warn", Level::WARN),
43        );
44
45    match tracing_subscriber::registry()
46        .with(filtered_layer)
47        .try_init()
48    {
49        Err(err) => Err(anyhow!(err)),
50        _ => Ok(()),
51    }
52}
53
54/// Custom info level macro.
55#[macro_export]
56macro_rules! server_info {
57    ($($arg:tt)*) => {
58        tracing::info!(
59            target: "static_web_server::info",
60            $($arg)*
61        )
62    };
63}
64
65/// Custom warn level macro.
66#[macro_export]
67macro_rules! server_warn {
68    ($($arg:tt)*) => {
69        tracing::warn!(
70            target: "static_web_server::warn",
71            $($arg)*
72        )
73    };
74}