fix: Handle missing time offsets gracefully

The tracing_subscribe docs state that missing offsets likely mean
that we're in a multithreaded context:
https://docs.rs/tracing-subscriber/latest/tracing_subscriber/fmt/time/struct.OffsetTime.html#method.local_rfc_3339

We're not in a multithreaded context at this point, but some platforms
(e.g. OpenBSD) still don't have time offsets available.

Since this is only a rust-analyzer debugging convenience, just use
system time logging in this situation.

Fixes #18384
This commit is contained in:
Wilfred Hughes 2024-10-23 09:57:57 -07:00
parent f9935be013
commit 2b676bfbd7

View file

@ -58,14 +58,22 @@ where
let writer = self.writer;
let ra_fmt_layer = tracing_subscriber::fmt::layer()
.with_timer(
time::OffsetTime::local_rfc_3339()
.expect("Could not get local offset, make sure you're on the main thread"),
)
.with_target(false)
.with_ansi(false)
.with_writer(writer)
.with_filter(targets_filter);
.with_writer(writer);
let ra_fmt_layer = match time::OffsetTime::local_rfc_3339() {
Ok(timer) => {
// If we can get the time offset, format logs with the timezone.
ra_fmt_layer.with_timer(timer).boxed()
}
Err(_) => {
// Use system time if we can't get the time offset. This should
// never happen on Linux, but can happen on e.g. OpenBSD.
ra_fmt_layer.boxed()
}
}
.with_filter(targets_filter);
let chalk_layer = match self.chalk_filter {
Some(chalk_filter) => {