diff --git a/codex-rs/state/src/log_db.rs b/codex-rs/state/src/log_db.rs index 71d2afbc01dc..4a7936ce8fc4 100644 --- a/codex-rs/state/src/log_db.rs +++ b/codex-rs/state/src/log_db.rs @@ -189,19 +189,11 @@ where fn on_event(&self, event: &Event<'_>, ctx: tracing_subscriber::layer::Context<'_, S>) { let metadata = event.metadata(); - // The SDK emits DEBUG timer meta-events every second per process; these - // were over 30% of retained logs in measured high-fanout Codex environments. - if metadata.target() == "opentelemetry_sdk" - && matches!( - *metadata.level(), - tracing::Level::TRACE | tracing::Level::DEBUG - ) - { - return; - } - let mut visitor = MessageVisitor::default(); event.record(&mut visitor); + if should_drop_event(metadata, visitor.message.as_deref()) { + return; + } let thread_id = visitor .thread_id .clone() @@ -415,6 +407,42 @@ async fn flush(state_db: &StateRuntime, buffer: &mut Vec) { let _ = state_db.insert_logs(entries.as_slice()).await; } +fn should_drop_event(metadata: &tracing::Metadata<'_>, message: Option<&str>) -> bool { + if metadata.target() == "opentelemetry_sdk" + && matches!( + *metadata.level(), + tracing::Level::TRACE | tracing::Level::DEBUG + ) + { + return true; + } + + if metadata.target() == "log" + && matches!( + *metadata.level(), + tracing::Level::TRACE | tracing::Level::DEBUG + ) + && message.is_some_and(is_noisy_file_watcher_log) + { + return true; + } + + false +} + +fn is_noisy_file_watcher_log(message: &str) -> bool { + message.starts_with("inotify event:") + || message.starts_with("inotify event with unknown descriptor:") + || message.starts_with("adding inotify watch") + || message.starts_with("removing inotify watch") + || message.starts_with("kqueue event:") + || message.starts_with("adding kqueue watch") + || message.starts_with("removing kqueue watch") + || message.starts_with("FSEvent:") + || message.starts_with("rescanning ") + || message.starts_with("Event: path = ") +} + #[derive(Default)] struct MessageVisitor { message: Option, diff --git a/codex-rs/state/src/log_db_filter_tests.rs b/codex-rs/state/src/log_db_filter_tests.rs index 36ee27aba8a1..19f8d4d11fbd 100644 --- a/codex-rs/state/src/log_db_filter_tests.rs +++ b/codex-rs/state/src/log_db_filter_tests.rs @@ -51,3 +51,52 @@ async fn sqlite_sink_drops_low_level_opentelemetry_sdk_logs() { let _ = tokio::fs::remove_dir_all(codex_home).await; } + +#[tokio::test] +async fn sqlite_sink_drops_low_level_notify_logs() { + let codex_home = + std::env::temp_dir().join(format!("codex-state-log-db-filter-{}", Uuid::new_v4())); + let runtime = StateRuntime::init(codex_home.clone(), "test-provider".to_string()) + .await + .expect("initialize runtime"); + let layer = start(runtime.clone()); + + let guard = tracing_subscriber::registry() + .with( + layer + .clone() + .with_filter(Targets::new().with_default(tracing::Level::TRACE)), + ) + .set_default(); + + tracing::trace!( + target: "log", + "inotify event: Event {{ mask: EventMask(MODIFY), name: Some(\"logs_2.sqlite-wal\") }}" + ); + tracing::trace!(target: "log", "adding inotify watch"); + tracing::debug!(target: "log", "inotify event with unknown descriptor: Event {{ wd: 1 }}"); + tracing::trace!(target: "log", "kqueue event: Event {{ ident: 1 }}"); + tracing::trace!(target: "log", "FSEvent: path = `/tmp/logs_2.sqlite-wal`, flag = ItemModified"); + tracing::trace!(target: "log", "Event: path = `C:\\tmp\\logs_2.sqlite-wal`, action = Modified"); + tracing::trace!(target: "log", "retained-third-party-trace"); + + layer.flush().await; + drop(guard); + + let logs = runtime + .query_logs(&crate::LogQuery::default()) + .await + .expect("query logs after flush"); + assert_eq!( + logs.iter() + .map(|row| ( + row.level.as_str(), + row.target.as_str(), + row.message.as_deref() + )) + .collect::>(), + vec![("TRACE", "log", Some("retained-third-party-trace"))] + ); + + let _ = tokio::fs::remove_dir_all(codex_home).await; +}