refactor(sidecar): inline Record construction for safer logging

- Build Record inline so fmt::Arguments temporary only lives through writer.write, avoiding dropped-temporary borrow.
- Add explicit 'static annotation on leaked string before reboxing for clarity.
This commit is contained in:
Slinetrac
2025-10-09 18:41:09 +08:00
parent fe7eb59f18
commit 58bd2032f3

View File

@@ -64,16 +64,17 @@ fn write_sidecar_log(
message: String, message: String,
) -> String { ) -> String {
let boxed = message.into_boxed_str(); let boxed = message.into_boxed_str();
let leaked = Box::leak(boxed); let leaked: &'static mut str = Box::leak(boxed);
let leaked_ptr = leaked as *mut str; let leaked_ptr = leaked as *mut str;
let args = format_args!("{}", leaked);
{ {
let record = Record::builder() let _ = writer.write(
.args(args) now,
&Record::builder()
.args(format_args!("{}", &*leaked))
.level(level) .level(level)
.target("sidecar") .target("sidecar")
.build(); .build(),
let _ = writer.write(now, &record); );
} }
// SAFETY: `leaked` originated from `Box::leak` above; reboxing frees it immediately after use. // SAFETY: `leaked` originated from `Box::leak` above; reboxing frees it immediately after use.
unsafe { String::from(Box::from_raw(leaked_ptr)) } unsafe { String::from(Box::from_raw(leaked_ptr)) }