summaryrefslogtreecommitdiffstats
path: root/Lib/logging
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-24 07:14:26 (GMT)
committerGitHub <noreply@github.com>2024-06-24 07:14:26 (GMT)
commit544a47212b92f52ceffbd50275c6b0c57a446a98 (patch)
tree7ad39158391255a0639226e83790b8877fd018b4 /Lib/logging
parentb7240ed3f09ffb4bb8bffac3a1ff88b1e99afa26 (diff)
downloadcpython-544a47212b92f52ceffbd50275c6b0c57a446a98.zip
cpython-544a47212b92f52ceffbd50275c6b0c57a446a98.tar.gz
cpython-544a47212b92f52ceffbd50275c6b0c57a446a98.tar.bz2
[3.13] gh-120683: Fix an error in logging.LogRecord timestamp (GH-120709) (GH-120933)
The integer part of the timestamp can be rounded up, while the millisecond calculation truncates, causing the log timestamp to be wrong by up to 999 ms (affected roughly 1 in 8 million timestamps). (cherry picked from commit 1500a23f33f5a6d052ff1ef6383d9839928b8ff1) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Lib/logging')
-rw-r--r--Lib/logging/__init__.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 174b37c..3f41442 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -340,11 +340,14 @@ class LogRecord(object):
self.lineno = lineno
self.funcName = func
self.created = ct / 1e9 # ns to float seconds
-
# Get the number of whole milliseconds (0-999) in the fractional part of seconds.
# Eg: 1_677_903_920_999_998_503 ns --> 999_998_503 ns--> 999 ms
# Convert to float by adding 0.0 for historical reasons. See gh-89047
self.msecs = (ct % 1_000_000_000) // 1_000_000 + 0.0
+ if self.msecs == 999.0 and int(self.created) != ct // 1_000_000_000:
+ # ns -> sec conversion can round up, e.g:
+ # 1_677_903_920_999_999_900 ns --> 1_677_903_921.0 sec
+ self.msecs = 0.0
self.relativeCreated = (ct - _startTime) / 1e6
if logThreads: