#event-logging #logging

env_filter

Filter log events using environment variables

6 releases (1 stable)

new 1.0.0 Feb 11, 2026
0.1.4 Oct 13, 2025
0.1.3 Dec 20, 2024
0.1.2 Jul 25, 2024
0.1.0 Jan 19, 2024

#196 in Debugging

Download history 1688792/week @ 2025-10-22 1612650/week @ 2025-10-29 1655254/week @ 2025-11-05 1620560/week @ 2025-11-12 1796152/week @ 2025-11-19 1408384/week @ 2025-11-26 1677394/week @ 2025-12-03 1752488/week @ 2025-12-10 1512120/week @ 2025-12-17 874310/week @ 2025-12-24 1188683/week @ 2025-12-31 1831344/week @ 2026-01-07 1811379/week @ 2026-01-14 2088283/week @ 2026-01-21 2128614/week @ 2026-01-28 2181770/week @ 2026-02-04

8,592,763 downloads per month
Used in 6,423 crates (22 directly)

MIT/Apache

48KB
975 lines

Filtering for log records.

You can use the Filter type in your own logger implementation to use the same filter parsing and matching as env_logger.

Using env_filter in your own logger

You can use env_filter's filtering functionality with your own logger. Call Builder::parse to parse directives from a string when constructing your logger. Call Filter::matches to check whether a record should be logged based on the parsed filters when log records are received.

use env_filter::Filter;
use log::{Log, Metadata, Record};

struct PrintLogger;

impl Log for PrintLogger {
    fn enabled(&self, metadata: &Metadata) -> bool {
        true
    }

    fn log(&self, record: &Record) {
        println!("{:?}", record);
    }

    fn flush(&self) {}
}

let mut builder = env_filter::Builder::new();
// Parse a directives string from an environment variable
if let Ok(ref filter) = std::env::var("MY_LOG_LEVEL") {
    builder.parse(filter);
}

let logger = env_filter::FilteredLog::new(PrintLogger, builder.build());

env_filter

crates.io Documentation

Filter log events using environment variables

Dependencies

~2.5–4MB
~65K SLoC