diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index c3b6c27bee..90d6a40ee2 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -6804,6 +6804,16 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.20" @@ -6814,12 +6824,15 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex-automata", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] diff --git a/codex-rs/app-server/Cargo.toml b/codex-rs/app-server/Cargo.toml index 99d5a7a141..377c945883 100644 --- a/codex-rs/app-server/Cargo.toml +++ b/codex-rs/app-server/Cargo.toml @@ -42,7 +42,7 @@ tokio = { workspace = true, features = [ "signal", ] } tracing = { workspace = true, features = ["log"] } -tracing-subscriber = { workspace = true, features = ["env-filter", "fmt"] } +tracing-subscriber = { workspace = true, features = ["env-filter", "fmt", "json"] } opentelemetry-appender-tracing = { workspace = true } uuid = { workspace = true, features = ["serde", "v7"] } diff --git a/codex-rs/app-server/src/lib.rs b/codex-rs/app-server/src/lib.rs index 2aee5bc93e..f0d197f991 100644 --- a/codex-rs/app-server/src/lib.rs +++ b/codex-rs/app-server/src/lib.rs @@ -106,6 +106,9 @@ pub async fn run_main( .with_filter(EnvFilter::from_default_env()); let feedback_layer = tracing_subscriber::fmt::layer() + .json() + .flatten_event(true) + .with_current_span(false) .with_writer(feedback.make_writer()) .with_ansi(false) .with_target(false) diff --git a/codex-rs/feedback/src/lib.rs b/codex-rs/feedback/src/lib.rs index eaa949717a..eb70d8555e 100644 --- a/codex-rs/feedback/src/lib.rs +++ b/codex-rs/feedback/src/lib.rs @@ -162,7 +162,7 @@ impl CodexLogSnapshot { pub fn save_to_temp_file(&self) -> io::Result { let dir = std::env::temp_dir(); - let filename = format!("codex-feedback-{}.log", self.thread_id); + let filename = format!("codex-feedback-{}.jsonl", self.thread_id); let path = dir.join(filename); fs::write(&path, self.as_bytes())?; Ok(path) @@ -245,7 +245,7 @@ impl CodexLogSnapshot { if include_logs { envelope.add_item(EnvelopeItem::Attachment(Attachment { buffer: self.bytes.clone(), - filename: String::from("codex-logs.log"), + filename: String::from("codex-logs.jsonl"), content_type: Some("text/plain".to_string()), ty: None, })); diff --git a/codex-rs/tui/Cargo.toml b/codex-rs/tui/Cargo.toml index 248205c427..32c92e5630 100644 --- a/codex-rs/tui/Cargo.toml +++ b/codex-rs/tui/Cargo.toml @@ -85,7 +85,7 @@ tokio-stream = { workspace = true } toml = { workspace = true } tracing = { workspace = true, features = ["log"] } tracing-appender = { workspace = true } -tracing-subscriber = { workspace = true, features = ["env-filter"] } +tracing-subscriber = { workspace = true, features = ["env-filter", "json"] } tree-sitter-bash = { workspace = true } tree-sitter-highlight = { workspace = true } unicode-segmentation = { workspace = true } diff --git a/codex-rs/tui/src/lib.rs b/codex-rs/tui/src/lib.rs index 0aa422cc61..5e2a279119 100644 --- a/codex-rs/tui/src/lib.rs +++ b/codex-rs/tui/src/lib.rs @@ -277,6 +277,9 @@ pub async fn run_main( let targets = Targets::new().with_default(tracing::Level::TRACE); let feedback_layer = tracing_subscriber::fmt::layer() + .json() + .flatten_event(true) + .with_current_span(false) .with_writer(feedback.make_writer()) .with_ansi(false) .with_target(false)