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) -> 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
23fn 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#[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#[macro_export]
67macro_rules! server_warn {
68 ($($arg:tt)*) => {
69 tracing::warn!(
70 target: "static_web_server::warn",
71 $($arg)*
72 )
73 };
74}