diff --git a/README.md b/README.md index 6fbe051..8737769 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ Global flags: - `--log-level ` - `--log-format ` - `--log-file ` +- `NETTOOL_LOG_FILTER` or `RUST_LOG` can override log filters (ex: `maxminddb::decoder=debug`) Command flags (implemented): - `sys ip`: `--all`, `--iface ` diff --git a/crates/wtfnet-core/src/lib.rs b/crates/wtfnet-core/src/lib.rs index 62b2555..5c511df 100644 --- a/crates/wtfnet-core/src/lib.rs +++ b/crates/wtfnet-core/src/lib.rs @@ -3,6 +3,7 @@ use std::path::{Path, PathBuf}; use time::format_description::well_known::Rfc3339; use time::OffsetDateTime; use tracing_subscriber::prelude::*; +use tracing_subscriber::EnvFilter; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CommandEnvelope { @@ -227,9 +228,10 @@ fn init_logging_text( log_file: Option<&PathBuf>, ) -> Result> { let (writer, guard) = logging_writer(log_file)?; + let filter = build_log_filter(level_filter); let layer = tracing_subscriber::fmt::layer() .with_writer(writer) - .with_filter(level_filter); + .with_filter(filter); tracing_subscriber::registry().with(layer).init(); Ok(LoggingHandle { _guard: guard }) } @@ -239,14 +241,27 @@ fn init_logging_json( log_file: Option<&PathBuf>, ) -> Result> { let (writer, guard) = logging_writer(log_file)?; + let filter = build_log_filter(level_filter); let layer = tracing_subscriber::fmt::layer() .with_writer(writer) .json() - .with_filter(level_filter); + .with_filter(filter); tracing_subscriber::registry().with(layer).init(); Ok(LoggingHandle { _guard: guard }) } +fn build_log_filter(level_filter: tracing_subscriber::filter::LevelFilter) -> EnvFilter { + if let Ok(filter) = EnvFilter::try_from_env("NETTOOL_LOG_FILTER") { + return filter; + } + if let Ok(filter) = EnvFilter::try_from_default_env() { + return filter; + } + EnvFilter::default() + .add_directive(level_filter.into()) + .add_directive("maxminddb::decoder=off".parse().unwrap()) +} + fn logging_writer( log_file: Option<&PathBuf>, ) -> Result<