Skip to content

Commit 4fbfd38

Browse files
committed
Added support for module level filtering
Added support for `RUST_LOG`-based module/target level filtering like in env_logger crate
1 parent f12a2b3 commit 4fbfd38

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

src/lib.rs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,18 +150,48 @@ impl SimpleLogger {
150150
/// [`with_level`] if `RUST_LOG` is not set or can't be parsed as a
151151
/// standard log level.
152152
///
153+
/// module/target level filtering is supported
154+
///
155+
/// the following format is expected:
156+
/// ```text
157+
/// RUST_LOG=[default-level][,][target][=][level][,...]
158+
/// ```
159+
/// example:
160+
/// ```text
161+
/// RUST_LOG=warn,data=debug,hardware=debug
162+
/// ```
163+
///
153164
/// This must be called after [`with_level`]. If called before
154165
/// [`with_level`], it will have no effect.
155166
///
156167
/// [`with_level`]: #method.with_level
157168
#[must_use = "You must call init() to begin logging"]
158169
pub fn env(mut self) -> SimpleLogger {
159-
self.default_level = std::env::var("RUST_LOG")
160-
.ok()
161-
.as_deref()
162-
.map(log::LevelFilter::from_str)
163-
.and_then(Result::ok)
164-
.unwrap_or(self.default_level);
170+
if let Ok(modules) = std::env::var("RUST_LOG").as_deref() {
171+
let mut iter = modules.split(',');
172+
173+
if let Some((module, level)) = iter
174+
.next()
175+
.map(|pair| match log::LevelFilter::from_str(pair) {
176+
Ok(level) => {
177+
self.default_level = level;
178+
None
179+
}
180+
Err(_) => Some(pair),
181+
})
182+
.and_then(|x| x)
183+
.map(|pair| pair.split_once('='))
184+
.and_then(|x| x)
185+
{
186+
let level = log::LevelFilter::from_str(level).unwrap_or(self.default_level);
187+
self.module_levels.push((module.to_string(), level));
188+
}
189+
190+
for (module, level) in iter.flat_map(|x| x.split_once('=')) {
191+
let level = log::LevelFilter::from_str(level).unwrap_or(self.default_level);
192+
self.module_levels.push((module.to_string(), level));
193+
}
194+
}
165195

166196
self
167197
}

0 commit comments

Comments
 (0)