fix(logging): enforce single-writer sinks and bound tracing (#4765)

* fix(obs): prevent rolling log stdout aliasing

* fix(ecstore): bound hot-path tracing payloads

* test(logging): guard service and disk log invariants

* fix(obs): silence useless_conversion on st_dev for Linux clippy

rustix's Stat.st_dev is u64 on Linux/glibc, making u64::try_from a no-op
that trips clippy::useless_conversion under -D warnings. The conversion is
still needed on macOS/BSD where st_dev is a signed dev_t, so suppress the
lint on that line rather than dropping the portable fallible conversion.

* fix(logging): keep stdout sink validation portable (#4769)

* fix(obs): keep stdout device conversion portable

* docs(logging): update single-writer plan status

---------

Co-authored-by: overtrue <anzhengchao@gmail.com>
Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
cxymds
2026-07-12 16:03:01 +08:00
committed by GitHub
parent 2ddafb4ed9
commit d8e69a3adf
14 changed files with 539 additions and 153 deletions
+13 -1
View File
@@ -133,10 +133,22 @@ impl RollingAppender {
Ok(appender)
}
fn active_file_path(&self) -> PathBuf {
pub(crate) fn active_file_path(&self) -> PathBuf {
self.dir.join(&self.filename)
}
#[cfg(unix)]
pub(crate) fn active_file_identity(&self) -> io::Result<(u64, u64)> {
use std::os::unix::fs::MetadataExt;
let metadata = self
.file
.as_ref()
.ok_or_else(|| io::Error::other("rolling log file is not open"))?
.metadata()?;
Ok((metadata.dev(), metadata.ino()))
}
fn open_file(&mut self) -> io::Result<()> {
if self.file.is_some() {
return Ok(());