From 0e8961937e9b90f136111c5013f114f5786e706e Mon Sep 17 00:00:00 2001 From: mdecimus Date: Wed, 10 Apr 2024 16:53:26 +0200 Subject: [PATCH] Filter out invalid timestamps on log entries --- crates/jmap/src/api/management/log.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/crates/jmap/src/api/management/log.rs b/crates/jmap/src/api/management/log.rs index 3b99af87..0e029bc0 100644 --- a/crates/jmap/src/api/management/log.rs +++ b/crates/jmap/src/api/management/log.rs @@ -4,6 +4,7 @@ use std::{ path::Path, }; +use chrono::DateTime; use rev_lines::RevLines; use serde::Serialize; use serde_json::json; @@ -120,14 +121,11 @@ fn read_log_files( impl LogEntry { fn from_line(line: &str) -> Option { let (timestamp, rest) = line.split_once(' ')?; - let timestamp = timestamp - .rsplit_once('.') - .filter(|(_, z)| z.ends_with('Z')) - .map_or_else(|| timestamp.to_string(), |(t, _)| format!("{t}Z")); + let timestamp = DateTime::parse_from_rfc3339(timestamp).ok()?; let (level, message) = rest.trim().split_once(' ')?; let message = message.split_once(": ").map_or(message, |(_, v)| v); Some(Self { - timestamp, + timestamp: timestamp.to_rfc3339_opts(chrono::SecondsFormat::Secs, true), level: level.to_string(), message: message.to_string(), })