From 252d9cc6e74517d34913f2ee914d89e5f3ae9764 Mon Sep 17 00:00:00 2001 From: jif-oai Date: Tue, 23 Jun 2026 10:05:45 +0100 Subject: [PATCH 1/2] Stop persisting bridged log events --- codex-rs/Cargo.lock | 1 + codex-rs/Cargo.toml | 1 + codex-rs/state/Cargo.toml | 1 + codex-rs/state/src/log_db.rs | 7 ++++ codex-rs/state/src/log_db_filter_tests.rs | 42 +++++++++++++++++++++++ 5 files changed, 52 insertions(+) diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 65d581db6f7a..f9d743b033d5 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -3929,6 +3929,7 @@ dependencies = [ "strum 0.27.2", "tokio", "tracing", + "tracing-log", "tracing-subscriber", "uuid", ] diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index 9591f78afa9e..40d53e625177 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -429,6 +429,7 @@ toml = "0.9.5" toml_edit = "0.24.0" tracing = "0.1.44" tracing-appender = "0.2.3" +tracing-log = "0.2.0" tracing-opentelemetry = "0.32.0" tracing-subscriber = "0.3.22" tracing-test = "0.2.5" diff --git a/codex-rs/state/Cargo.toml b/codex-rs/state/Cargo.toml index cbcec171ee3a..47e9b9255c96 100644 --- a/codex-rs/state/Cargo.toml +++ b/codex-rs/state/Cargo.toml @@ -25,6 +25,7 @@ uuid = { workspace = true } [dev-dependencies] codex-git-utils = { workspace = true } pretty_assertions = { workspace = true } +tracing-log = { workspace = true } [lints] workspace = true diff --git a/codex-rs/state/src/log_db.rs b/codex-rs/state/src/log_db.rs index 55de2a30777c..2cf0f5d9af42 100644 --- a/codex-rs/state/src/log_db.rs +++ b/codex-rs/state/src/log_db.rs @@ -199,6 +199,13 @@ where fn on_event(&self, event: &Event<'_>, ctx: tracing_subscriber::layer::Context<'_, S>) { let metadata = event.metadata(); + // `tracing-log` checks filters with the original log target before + // dispatching an event whose tracing target is `log`, so the outer + // target filter cannot reliably reject these bridged events. + if metadata.target() == "log" { + return; + } + // 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" diff --git a/codex-rs/state/src/log_db_filter_tests.rs b/codex-rs/state/src/log_db_filter_tests.rs index 36ee27aba8a1..1c70fed36a48 100644 --- a/codex-rs/state/src/log_db_filter_tests.rs +++ b/codex-rs/state/src/log_db_filter_tests.rs @@ -6,6 +6,48 @@ use uuid::Uuid; use super::*; +#[tokio::test] +async fn sqlite_sink_drops_bridged_log_events() { + 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(default_filter())) + .set_default(); + + let record = log::Record::builder() + .args(format_args!("dropped-bridged-log")) + .level(log::Level::Trace) + .target("noisy_dependency") + .build(); + tracing_log::format_trace(&record).expect("dispatch bridged log event"); + tracing::trace!(target: "codex_state", "retained-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", "codex_state", Some("retained-trace"))] + ); + + let _ = tokio::fs::remove_dir_all(codex_home).await; +} + #[tokio::test] async fn sqlite_sink_drops_low_level_opentelemetry_sdk_logs() { let codex_home = From 6077aab64cb071b70cae6e9faf2ee1c4963ebd0c Mon Sep 17 00:00:00 2001 From: jif-oai Date: Tue, 23 Jun 2026 10:33:51 +0100 Subject: [PATCH 2/2] Drop bridged log filter regression test --- codex-rs/Cargo.lock | 1 - codex-rs/Cargo.toml | 1 - codex-rs/state/Cargo.toml | 1 - codex-rs/state/src/log_db_filter_tests.rs | 42 ----------------------- 4 files changed, 45 deletions(-) diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index f9d743b033d5..65d581db6f7a 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -3929,7 +3929,6 @@ dependencies = [ "strum 0.27.2", "tokio", "tracing", - "tracing-log", "tracing-subscriber", "uuid", ] diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index 40d53e625177..9591f78afa9e 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -429,7 +429,6 @@ toml = "0.9.5" toml_edit = "0.24.0" tracing = "0.1.44" tracing-appender = "0.2.3" -tracing-log = "0.2.0" tracing-opentelemetry = "0.32.0" tracing-subscriber = "0.3.22" tracing-test = "0.2.5" diff --git a/codex-rs/state/Cargo.toml b/codex-rs/state/Cargo.toml index 47e9b9255c96..cbcec171ee3a 100644 --- a/codex-rs/state/Cargo.toml +++ b/codex-rs/state/Cargo.toml @@ -25,7 +25,6 @@ uuid = { workspace = true } [dev-dependencies] codex-git-utils = { workspace = true } pretty_assertions = { workspace = true } -tracing-log = { workspace = true } [lints] workspace = true diff --git a/codex-rs/state/src/log_db_filter_tests.rs b/codex-rs/state/src/log_db_filter_tests.rs index 1c70fed36a48..36ee27aba8a1 100644 --- a/codex-rs/state/src/log_db_filter_tests.rs +++ b/codex-rs/state/src/log_db_filter_tests.rs @@ -6,48 +6,6 @@ use uuid::Uuid; use super::*; -#[tokio::test] -async fn sqlite_sink_drops_bridged_log_events() { - 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(default_filter())) - .set_default(); - - let record = log::Record::builder() - .args(format_args!("dropped-bridged-log")) - .level(log::Level::Trace) - .target("noisy_dependency") - .build(); - tracing_log::format_trace(&record).expect("dispatch bridged log event"); - tracing::trace!(target: "codex_state", "retained-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", "codex_state", Some("retained-trace"))] - ); - - let _ = tokio::fs::remove_dir_all(codex_home).await; -} - #[tokio::test] async fn sqlite_sink_drops_low_level_opentelemetry_sdk_logs() { let codex_home =