From d7482510b14a4d5affac63e4a59665cca9a76d60 Mon Sep 17 00:00:00 2001 From: jif-oai Date: Tue, 16 Dec 2025 17:53:15 +0100 Subject: [PATCH] nit: trace span for regular task (#8053) Logs are too spammy --------- Co-authored-by: Anton Panasenko --- codex-rs/codex-api/src/endpoint/responses.rs | 2 +- codex-rs/codex-client/src/default_client.rs | 4 ++-- codex-rs/core/src/codex.rs | 14 +++++++------- codex-rs/core/src/mcp_connection_manager.rs | 2 +- codex-rs/core/src/stream_events_utils.rs | 2 +- codex-rs/core/src/tasks/regular.rs | 4 ++-- codex-rs/core/src/tools/parallel.rs | 6 +++--- codex-rs/core/src/tools/router.rs | 4 ++-- codex-rs/core/tests/suite/otel.rs | 3 +++ codex-rs/otel/src/otel_manager.rs | 4 ++-- codex-rs/otel/src/otel_provider.rs | 2 +- 11 files changed, 25 insertions(+), 22 deletions(-) diff --git a/codex-rs/codex-api/src/endpoint/responses.rs b/codex-rs/codex-api/src/endpoint/responses.rs index a300b5a70..310f7e57b 100644 --- a/codex-rs/codex-api/src/endpoint/responses.rs +++ b/codex-rs/codex-api/src/endpoint/responses.rs @@ -58,7 +58,7 @@ impl ResponsesClient { self.stream(request.body, request.headers).await } - #[instrument(skip_all, err)] + #[instrument(level = "trace", skip_all, err)] pub async fn stream_prompt( &self, model: &str, diff --git a/codex-rs/codex-client/src/default_client.rs b/codex-rs/codex-client/src/default_client.rs index e79f873cb..efb4d5aec 100644 --- a/codex-rs/codex-client/src/default_client.rs +++ b/codex-rs/codex-client/src/default_client.rs @@ -181,7 +181,7 @@ mod tests { use opentelemetry::trace::TracerProvider; use opentelemetry_sdk::propagation::TraceContextPropagator; use opentelemetry_sdk::trace::SdkTracerProvider; - use tracing::info_span; + use tracing::trace_span; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; @@ -195,7 +195,7 @@ mod tests { tracing_subscriber::registry().with(tracing_opentelemetry::layer().with_tracer(tracer)); let _guard = subscriber.set_default(); - let span = info_span!("client_request"); + let span = trace_span!("client_request"); let _entered = span.enter(); let span_context = span.context().span().span_context().clone(); diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index 9d586b1f3..bcfe8e811 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -66,8 +66,8 @@ use tracing::debug; use tracing::error; use tracing::field; use tracing::info; -use tracing::info_span; use tracing::instrument; +use tracing::trace_span; use tracing::warn; use crate::ModelProviderInfo; @@ -2297,7 +2297,7 @@ async fn run_auto_compact(sess: &Arc, turn_context: &Arc) } } -#[instrument( +#[instrument(level = "trace", skip_all, fields( turn_id = %turn_context.sub_id, @@ -2437,7 +2437,7 @@ async fn drain_in_flight( } #[allow(clippy::too_many_arguments)] -#[instrument( +#[instrument(level = "trace", skip_all, fields( turn_id = %turn_context.sub_id, @@ -2466,7 +2466,7 @@ async fn try_run_turn( .client .clone() .stream(prompt) - .instrument(info_span!("stream_request")) + .instrument(trace_span!("stream_request")) .or_cancel(&cancellation_token) .await??; @@ -2482,9 +2482,9 @@ async fn try_run_turn( let mut last_agent_message: Option = None; let mut active_item: Option = None; let mut should_emit_turn_diff = false; - let receiving_span = info_span!("receiving_stream"); + let receiving_span = trace_span!("receiving_stream"); let outcome: CodexResult = loop { - let handle_responses = info_span!( + let handle_responses = trace_span!( parent: &receiving_span, "handle_responses", otel.name = field::Empty, @@ -2494,7 +2494,7 @@ async fn try_run_turn( let event = match stream .next() - .instrument(info_span!(parent: &handle_responses, "receiving")) + .instrument(trace_span!(parent: &handle_responses, "receiving")) .or_cancel(&cancellation_token) .await { diff --git a/codex-rs/core/src/mcp_connection_manager.rs b/codex-rs/core/src/mcp_connection_manager.rs index 460d598a9..3213b22b7 100644 --- a/codex-rs/core/src/mcp_connection_manager.rs +++ b/codex-rs/core/src/mcp_connection_manager.rs @@ -398,7 +398,7 @@ impl McpConnectionManager { /// Returns a single map that contains all tools. Each key is the /// fully-qualified name for the tool. - #[instrument(skip_all)] + #[instrument(level = "trace", skip_all)] pub async fn list_all_tools(&self) -> HashMap { let mut tools = HashMap::new(); for managed_client in self.clients.values() { diff --git a/codex-rs/core/src/stream_events_utils.rs b/codex-rs/core/src/stream_events_utils.rs index 1373fdf24..2e19a3694 100644 --- a/codex-rs/core/src/stream_events_utils.rs +++ b/codex-rs/core/src/stream_events_utils.rs @@ -39,7 +39,7 @@ pub(crate) struct HandleOutputCtx { pub cancellation_token: CancellationToken, } -#[instrument(skip_all)] +#[instrument(level = "trace", skip_all)] pub(crate) async fn handle_output_item_done( ctx: &mut HandleOutputCtx, item: ResponseItem, diff --git a/codex-rs/core/src/tasks/regular.rs b/codex-rs/core/src/tasks/regular.rs index 2ee598f21..56c46ffbc 100644 --- a/codex-rs/core/src/tasks/regular.rs +++ b/codex-rs/core/src/tasks/regular.rs @@ -7,7 +7,7 @@ use async_trait::async_trait; use codex_protocol::user_input::UserInput; use tokio_util::sync::CancellationToken; use tracing::Instrument; -use tracing::info_span; +use tracing::trace_span; use super::SessionTask; use super::SessionTaskContext; @@ -30,7 +30,7 @@ impl SessionTask for RegularTask { ) -> Option { let sess = session.clone_session(); let run_task_span = - info_span!(parent: sess.services.otel_manager.current_span(), "run_task"); + trace_span!(parent: sess.services.otel_manager.current_span(), "run_task"); run_task(sess, ctx, input, cancellation_token) .instrument(run_task_span) .await diff --git a/codex-rs/core/src/tools/parallel.rs b/codex-rs/core/src/tools/parallel.rs index d146507e5..dcd3ae40a 100644 --- a/codex-rs/core/src/tools/parallel.rs +++ b/codex-rs/core/src/tools/parallel.rs @@ -6,8 +6,8 @@ use tokio_util::either::Either; use tokio_util::sync::CancellationToken; use tokio_util::task::AbortOnDropHandle; use tracing::Instrument; -use tracing::info_span; use tracing::instrument; +use tracing::trace_span; use crate::codex::Session; use crate::codex::TurnContext; @@ -45,7 +45,7 @@ impl ToolCallRuntime { } } - #[instrument(skip_all, fields(call = ?call))] + #[instrument(level = "trace", skip_all, fields(call = ?call))] pub(crate) fn handle_tool_call( self, call: ToolCall, @@ -60,7 +60,7 @@ impl ToolCallRuntime { let lock = Arc::clone(&self.parallel_execution); let started = Instant::now(); - let dispatch_span = info_span!( + let dispatch_span = trace_span!( "dispatch_tool_call", otel.name = call.tool_name.as_str(), tool_name = call.tool_name.as_str(), diff --git a/codex-rs/core/src/tools/router.rs b/codex-rs/core/src/tools/router.rs index 66e6026b3..9d83b5a63 100644 --- a/codex-rs/core/src/tools/router.rs +++ b/codex-rs/core/src/tools/router.rs @@ -55,7 +55,7 @@ impl ToolRouter { .any(|config| config.spec.name() == tool_name) } - #[instrument(skip_all, err)] + #[instrument(level = "trace", skip_all, err)] pub async fn build_tool_call( session: &Session, item: ResponseItem, @@ -131,7 +131,7 @@ impl ToolRouter { } } - #[instrument(skip_all, err)] + #[instrument(level = "trace", skip_all, err)] pub async fn dispatch_tool_call( &self, session: Arc, diff --git a/codex-rs/core/tests/suite/otel.rs b/codex-rs/core/tests/suite/otel.rs index 65e96a4fe..922c7b9cf 100644 --- a/codex-rs/core/tests/suite/otel.rs +++ b/codex-rs/core/tests/suite/otel.rs @@ -25,6 +25,7 @@ use core_test_support::test_codex::TestCodex; use core_test_support::test_codex::test_codex; use core_test_support::wait_for_event; use std::sync::Mutex; +use tracing::Level; use tracing_test::traced_test; use tracing_subscriber::fmt::format::FmtSpan; @@ -454,6 +455,7 @@ async fn handle_responses_span_records_response_kind_and_tool_name() { let subscriber = tracing_subscriber::fmt() .with_level(true) .with_ansi(false) + .with_max_level(Level::TRACE) .with_span_events(FmtSpan::FULL) .with_writer(MockWriter::new(buffer)) .finish(); @@ -517,6 +519,7 @@ async fn record_responses_sets_span_fields_for_response_events() { let subscriber = tracing_subscriber::fmt() .with_level(true) .with_ansi(false) + .with_max_level(Level::TRACE) .with_span_events(FmtSpan::FULL) .with_writer(MockWriter::new(buffer)) .finish(); diff --git a/codex-rs/otel/src/otel_manager.rs b/codex-rs/otel/src/otel_manager.rs index 268897f8a..33750d83c 100644 --- a/codex-rs/otel/src/otel_manager.rs +++ b/codex-rs/otel/src/otel_manager.rs @@ -25,7 +25,7 @@ use std::time::Instant; use strum_macros::Display; use tokio::time::error::Elapsed; use tracing::Span; -use tracing::info_span; +use tracing::trace_span; use tracing_opentelemetry::OpenTelemetrySpanExt; #[derive(Debug, Clone, Serialize, Display)] @@ -67,7 +67,7 @@ impl OtelManager { terminal_type: String, session_source: SessionSource, ) -> OtelManager { - let session_span = info_span!("new_session", conversation_id = %conversation_id, session_source = %session_source); + let session_span = trace_span!("new_session", conversation_id = %conversation_id, session_source = %session_source); if let Some(context) = traceparent_context_from_env() { session_span.set_parent(context); diff --git a/codex-rs/otel/src/otel_provider.rs b/codex-rs/otel/src/otel_provider.rs index 8e2826f83..b9d955932 100644 --- a/codex-rs/otel/src/otel_provider.rs +++ b/codex-rs/otel/src/otel_provider.rs @@ -134,7 +134,7 @@ impl OtelProvider { self.tracer.as_ref().map(|tracer| { tracing_opentelemetry::layer() .with_tracer(tracer.clone()) - .with_filter(LevelFilter::INFO) + .with_filter(LevelFilter::TRACE) }) }