Skip to content

Commit 5fb9572

Browse files
committed
Use env_logger filters
1 parent 94e5aa8 commit 5fb9572

File tree

6 files changed

+162
-24
lines changed

6 files changed

+162
-24
lines changed

Cargo.lock

Lines changed: 108 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ serde = "1.0.97"
1616
serde_derive = "1.0.97"
1717
serde_json = "1.0.56"
1818
cfg-if = "0.1.9"
19+
env_logger = "0.8.3"
1920

2021
[target.'cfg(target_arch = "wasm32")'.dependencies]
2122
web-sys = { version = "0.3.25", features = ["console"] }

src/lib.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//! log::info!("Listening on port 8080");
1010
//! ```
1111
12+
use env_logger::filter::{Builder, Filter};
1213
pub use log::LevelFilter;
1314

1415
#[cfg(not(target_arch = "wasm32"))]
@@ -36,7 +37,8 @@ mod wasm;
3637
/// log::info!("Listening on port 8080");
3738
/// ```
3839
pub fn start() {
39-
with_level(LevelFilter::Info);
40+
let filter = Builder::from_env("RUST_LOG").build();
41+
with_filter(filter);
4042
}
4143

4244
/// Start logging with a log level.
@@ -48,16 +50,28 @@ pub fn start() {
4850
/// femme::with_level(log::LevelFilter::Trace);
4951
/// ```
5052
pub fn with_level(level: log::LevelFilter) {
53+
let filter = Builder::new().filter_level(level).build();
54+
with_filter(filter)
55+
}
56+
57+
/// Start logging with a log filter.
58+
///
59+
/// # Examples
60+
/// ```
61+
/// let filter = env_logger::filter::Builder::from_env("RUST_LOG").build();
62+
/// femme::with_filter(filter);
63+
/// ```
64+
pub fn with_filter(filter: Filter) {
5165
#[cfg(target_arch = "wasm32")]
52-
wasm::start(level);
66+
wasm::start(filter);
5367

5468
#[cfg(not(target_arch = "wasm32"))]
5569
{
5670
// Use ndjson in release mode, pretty logging while debugging.
5771
if cfg!(debug_assertions) {
58-
pretty::start(level);
72+
pretty::start(filter);
5973
} else {
60-
ndjson::start(level);
74+
ndjson::start(filter);
6175
}
6276
}
6377
}

src/ndjson.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
11
//! Print logs as ndjson.
22
3-
use log::{kv, LevelFilter, Log, Metadata, Record};
3+
use env_logger::filter::Filter;
4+
use log::{kv, Log, Metadata, Record};
45
use std::io::{self, StdoutLock, Write};
56
use std::time;
67

78
/// Start logging.
8-
pub(crate) fn start(level: LevelFilter) {
9-
let logger = Box::new(Logger {});
9+
pub(crate) fn start(filter: Filter) {
10+
let max_level = filter.filter();
11+
let logger = Box::new(Logger { filter });
1012
log::set_boxed_logger(logger).expect("Could not start logging");
11-
log::set_max_level(level);
13+
log::set_max_level(max_level);
1214
}
1315

1416
#[derive(Debug)]
15-
pub(crate) struct Logger {}
17+
pub(crate) struct Logger {
18+
filter: Filter,
19+
}
1620

1721
impl Log for Logger {
1822
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
19-
metadata.level() <= log::max_level()
23+
self.filter.enabled(metadata)
2024
}
2125

2226
fn log(&self, record: &Record<'_>) {
23-
if self.enabled(record.metadata()) {
27+
if self.filter.matches(record) {
2428
let stdout = io::stdout();
2529
let mut handle = stdout.lock();
2630
let level = get_level(record.level());
2731
let time = time::UNIX_EPOCH.elapsed().unwrap().as_millis();
28-
write!(&mut handle, "{{\"level\":{},\"time\":{},\"msg\":", level, time).unwrap();
32+
write!(
33+
&mut handle,
34+
"{{\"level\":{},\"time\":{},\"msg\":",
35+
level, time
36+
)
37+
.unwrap();
2938
serde_json::to_writer(&mut handle, record.args()).unwrap();
3039
format_kv_pairs(&mut handle, &record);
3140
writeln!(&mut handle, "}}").unwrap();

src/pretty.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//! Pretty print logs.
22
3-
use log::{kv, Level, LevelFilter, Log, Metadata, Record};
3+
use env_logger::filter::Filter;
4+
use log::{kv, Level, Log, Metadata, Record};
45
use std::io::{self, StdoutLock, Write};
56

67
// ANSI term codes.
@@ -11,22 +12,25 @@ const GREEN: &'static str = "\x1b[32m";
1112
const YELLOW: &'static str = "\x1b[33m";
1213

1314
/// Start logging.
14-
pub(crate) fn start(level: LevelFilter) {
15-
let logger = Box::new(Logger {});
15+
pub(crate) fn start(filter: Filter) {
16+
let max_level = filter.filter();
17+
let logger = Box::new(Logger { filter });
1618
log::set_boxed_logger(logger).expect("Could not start logging");
17-
log::set_max_level(level);
19+
log::set_max_level(max_level);
1820
}
1921

2022
#[derive(Debug)]
21-
pub(crate) struct Logger {}
23+
pub(crate) struct Logger {
24+
filter: Filter,
25+
}
2226

2327
impl Log for Logger {
2428
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
25-
metadata.level() <= log::max_level()
29+
self.filter.enabled(metadata)
2630
}
2731

2832
fn log(&self, record: &Record<'_>) {
29-
if self.enabled(record.metadata()) {
33+
if self.filter.matches(record) {
3034
let stdout = io::stdout();
3135
let mut handle = stdout.lock();
3236
format_src(&mut handle, &record);

src/wasm.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
11
//! Print logs as ndjson.
22
3+
use env_logger::filter::Filter;
34
use js_sys::Object;
45
use log::{kv, Level, LevelFilter, Log, Metadata, Record};
56
use wasm_bindgen::prelude::*;
67

78
use std::collections::HashMap;
89

910
/// Start logging.
10-
pub(crate) fn start(level: LevelFilter) {
11-
let logger = Box::new(Logger {});
11+
pub(crate) fn start(filter: Filter) {
12+
let max_level = filter.filter();
13+
let logger = Box::new(Logger { filter });
1214
log::set_boxed_logger(logger).expect("Could not start logging");
13-
log::set_max_level(level);
15+
log::set_max_level(max_level);
1416
}
1517

1618
#[derive(Debug)]
1719
pub(crate) struct Logger {}
1820

1921
impl Log for Logger {
2022
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
21-
metadata.level() <= log::max_level()
23+
self.filter.enabled(metadata)
2224
}
2325

2426
fn log(&self, record: &Record<'_>) {
25-
if self.enabled(record.metadata()) {
27+
if self.filter.matches(record) {
2628
let args = format!("{}", record.args()).into();
2729
let line = format_line(&record).into();
2830

0 commit comments

Comments
 (0)