From 4fecdd4c60922caa502e1330bad2071cb015ffb9 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 25 Feb 2026 13:47:19 +0000 Subject: suppress [Run N] header and redirect logs to stderr in JSON mode for clean pipe-friendly output --- grasp-audit/src/bin/grasp-audit.rs | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/grasp-audit/src/bin/grasp-audit.rs b/grasp-audit/src/bin/grasp-audit.rs index e77a698..a6db627 100644 --- a/grasp-audit/src/bin/grasp-audit.rs +++ b/grasp-audit/src/bin/grasp-audit.rs @@ -67,13 +67,25 @@ enum Commands { #[tokio::main] async fn main() -> Result<()> { - // Initialize logging - tracing_subscriber::fmt() - .with_env_filter( - tracing_subscriber::EnvFilter::from_default_env() - .add_directive(tracing::Level::INFO.into()), - ) - .init(); + // In JSON mode logs must not pollute stdout (used for machine-readable output). + // Check argv directly so we know the mode before parsing the full CLI. + let json_mode = std::env::args().any(|a| a == "--json"); + if json_mode { + tracing_subscriber::fmt() + .with_env_filter( + tracing_subscriber::EnvFilter::from_default_env() + .add_directive(tracing::Level::INFO.into()), + ) + .with_writer(std::io::stderr) + .init(); + } else { + tracing_subscriber::fmt() + .with_env_filter( + tracing_subscriber::EnvFilter::from_default_env() + .add_directive(tracing::Level::INFO.into()), + ) + .init(); + } let cli = Cli::parse(); @@ -99,7 +111,9 @@ async fn main() -> Result<()> { if let Some(interval) = watch { let mut run = 1u64; loop { - println!("\n[Run {}]", run); + if !json { + println!("\n[Run {}]", run); + } let report = grasp_audit::probe::run_probe(&relay, keys.clone(), read_only, timeout) .await; -- cgit v1.2.3