env_filter/lib.rs
1//! Filtering for log records.
2//!
3//! You can use the [`Filter`] type in your own logger implementation to use the same
4//! filter parsing and matching as `env_logger`.
5//!
6//! ## Using `env_filter` in your own logger
7//!
8//! You can use `env_filter`'s filtering functionality with your own logger.
9//! Call [`Builder::parse`] to parse directives from a string when constructing
10//! your logger. Call [`Filter::matches`] to check whether a record should be
11//! logged based on the parsed filters when log records are received.
12//!
13//! ```
14//! use env_filter::Filter;
15//! use log::{Log, Metadata, Record};
16//!
17//! struct PrintLogger;
18//!
19//! impl Log for PrintLogger {
20//! fn enabled(&self, metadata: &Metadata) -> bool {
21//! true
22//! }
23//!
24//! fn log(&self, record: &Record) {
25//! println!("{:?}", record);
26//! }
27//!
28//! fn flush(&self) {}
29//! }
30//!
31//! let mut builder = env_filter::Builder::new();
32//! // Parse a directives string from an environment variable
33//! if let Ok(ref filter) = std::env::var("MY_LOG_LEVEL") {
34//! builder.parse(filter);
35//! }
36//!
37//! let logger = env_filter::FilteredLog::new(PrintLogger, builder.build());
38//! ```
39
40#![cfg_attr(docsrs, feature(doc_auto_cfg))]
41#![warn(missing_docs)]
42#![warn(clippy::print_stderr)]
43#![warn(clippy::print_stdout)]
44
45mod directive;
46mod filter;
47mod filtered_log;
48mod op;
49mod parser;
50
51use directive::enabled;
52use directive::Directive;
53use op::FilterOp;
54use parser::parse_spec;
55
56pub use filter::Builder;
57pub use filter::Filter;
58pub use filtered_log::FilteredLog;
59pub use parser::ParseError;