From 653d0ea55269ca51bfa6920f29fc6d2dd58f0f79 Mon Sep 17 00:00:00 2001 From: amackillop Date: Fri, 8 May 2026 12:41:48 -0700 Subject: [PATCH] Clamp rustls and hyper_util log noise to warn When the daemon runs at debug or trace to investigate our own code, rustls and hyper_util bury the output in handshake and connection pool chatter. Filter those targets at the logger so global verbosity stays useful. A static prefix table is enough. No env_logger-style filter parser, no config surface, just a list we extend if another dependency starts misbehaving. Prefix matching covers submodules like rustls::client without enumerating each one. --- src/daemon/logger.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/daemon/logger.rs b/src/daemon/logger.rs index ae14d18..c6d1ec3 100644 --- a/src/daemon/logger.rs +++ b/src/daemon/logger.rs @@ -3,6 +3,14 @@ use std::io::{self, Write}; use chrono::{SecondsFormat, Utc}; use log::{Level, LevelFilter, Log, Metadata, Record}; +/// Per-target log overrides. Crates that spew DEBUG/TRACE noise we +/// almost never care about get clamped, regardless of the global +/// filter. +const TARGET_OVERRIDES: &[(&str, LevelFilter)] = &[ + ("rustls", LevelFilter::Warn), + ("hyper_util", LevelFilter::Warn), +]; + pub fn init(level: LevelFilter) { log::set_boxed_logger(Box::new(ConsoleLogger(level))).expect("logger already set"); log::set_max_level(level); @@ -12,7 +20,12 @@ struct ConsoleLogger(LevelFilter); impl Log for ConsoleLogger { fn enabled(&self, metadata: &Metadata) -> bool { - metadata.level() <= self.0 + let max = TARGET_OVERRIDES + .iter() + .find(|(prefix, _)| metadata.target().starts_with(prefix)) + .map(|(_, lvl)| *lvl) + .unwrap_or(self.0); + metadata.level() <= max } fn log(&self, record: &Record) {