From 63b4b60b79816bae0dff945bef090ee7af836234 Mon Sep 17 00:00:00 2001 From: Ben Kunkle Date: Wed, 16 Apr 2025 19:30:23 -0400 Subject: [PATCH] zlog: Ensure log file is flushed (#28923) Closes #ISSUE Release Notes: - N/A *or* Added/Fixed/Improved ... --- crates/zed/src/reliability.rs | 1 + crates/zlog/src/sink.rs | 13 ++++++++++++- crates/zlog/src/zlog.rs | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/zed/src/reliability.rs b/crates/zed/src/reliability.rs index 86d17c83c1..6688417720 100644 --- a/crates/zed/src/reliability.rs +++ b/crates/zed/src/reliability.rs @@ -130,6 +130,7 @@ pub fn init_panic_hook( if let Some(panic_data_json) = serde_json::to_string_pretty(&panic_data).log_err() { log::error!("{}", panic_data_json); } + zlog::flush(); if !is_pty { if let Some(panic_data_json) = serde_json::to_string(&panic_data).log_err() { diff --git a/crates/zlog/src/sink.rs b/crates/zlog/src/sink.rs index 6a2a041b2a..96a3b5750a 100644 --- a/crates/zlog/src/sink.rs +++ b/crates/zlog/src/sink.rs @@ -152,7 +152,18 @@ pub fn submit(record: Record) { } pub fn flush() { - _ = std::io::stdout().lock().flush(); + if unsafe { ENABLED_SINKS_STDOUT } { + _ = std::io::stdout().lock().flush(); + } + let mut file = ENABLED_SINKS_FILE.lock().unwrap_or_else(|handle| { + ENABLED_SINKS_FILE.clear_poison(); + handle.into_inner() + }); + if let Some(file) = file.as_mut() { + if let Err(err) = file.flush() { + eprintln!("Failed to flush log file: {}", err); + } + } } struct ScopeFmt(Scope); diff --git a/crates/zlog/src/zlog.rs b/crates/zlog/src/zlog.rs index 9191335e41..6c34f164d8 100644 --- a/crates/zlog/src/zlog.rs +++ b/crates/zlog/src/zlog.rs @@ -5,7 +5,7 @@ mod env_config; pub mod filter; pub mod sink; -pub use sink::{init_output_file, init_output_stdout}; +pub use sink::{flush, init_output_file, init_output_stdout}; pub const SCOPE_DEPTH_MAX: usize = 4;