diff --git a/tracing-appender/src/rolling.rs b/tracing-appender/src/rolling.rs index 1f02ab470..c98e9d58b 100644 --- a/tracing-appender/src/rolling.rs +++ b/tracing-appender/src/rolling.rs @@ -34,7 +34,7 @@ use std::{ path::{Path, PathBuf}, sync::atomic::{AtomicUsize, Ordering}, }; -use time::{format_description, Date, Duration, OffsetDateTime, Time}; +use time::{format_description, Date, Duration, OffsetDateTime, PrimitiveDateTime, Time}; mod builder; pub use builder::{Builder, InitError}; @@ -676,7 +676,24 @@ impl Inner { return None; } - let created = metadata.created().ok()?; + let created = metadata.created().ok().or_else(|| { + let mut datetime = filename; + if let Some(prefix) = &self.log_filename_prefix { + datetime = datetime.strip_prefix(prefix)?; + datetime = datetime.strip_prefix('.')?; + } + if let Some(suffix) = &self.log_filename_suffix { + datetime = datetime.strip_suffix(suffix)?; + datetime = datetime.strip_suffix('.')?; + } + + Some( + PrimitiveDateTime::parse(datetime, &self.date_format) + .ok()? + .assume_utc() + .into(), + ) + })?; Some((entry, created)) }) .collect::>()