Skip to main content

pubhubs/servers/config/
log.rs

1//! Configuration of logging
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug, Clone, Default)]
5#[serde(deny_unknown_fields)]
6pub struct LogConfig {
7    #[serde(default)]
8    level: Option<log::LevelFilter>,
9
10    #[serde(default)]
11    modules: indexmap::IndexMap<String, log::LevelFilter>,
12}
13
14impl LogConfig {
15    /// Initialize [`env_logger`] (if it isn't already) by using the given configuration.
16    pub fn try_init_env_logger(&self) {
17        let mut builder = env_logger::Builder::from_default_env();
18
19        if let Some(level) = self.level {
20            builder.filter_level(level);
21        }
22
23        for (module, level) in &self.modules {
24            builder.filter_module(module, *level);
25        }
26
27        if builder.try_init().is_err() {
28            log::warn!(
29                "not using logger configuration from configuration file: logger already initialized by RUST_LOG environmental variable"
30            );
31        };
32    }
33}