]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-89047: Fix msecs computation so you never end up with 1000 msecs. (GH-96340...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sat, 27 Aug 2022 14:09:54 +0000 (07:09 -0700)
committerGitHub <noreply@github.com>
Sat, 27 Aug 2022 14:09:54 +0000 (15:09 +0100)
Lib/logging/__init__.py
Lib/test/test_logging.py

index 79e4b7d09bfa43c43abcda8719c4f0a4d903d2fa..458c5fb7d0dccaecc3c51a2f4152f93ecdc4fa14 100644 (file)
@@ -334,7 +334,7 @@ class LogRecord(object):
         self.lineno = lineno
         self.funcName = func
         self.created = ct
-        self.msecs = (ct - int(ct)) * 1000
+        self.msecs = int((ct - int(ct)) * 1000) + 0.0  # see gh-89047
         self.relativeCreated = (self.created - _startTime) * 1000
         if logThreads:
             self.thread = threading.get_ident()
index 71926a5432e26a6e8146227f766b9056b13c20dc..5349874c63c5250dc3b7850ede0c88d0e2e37b8b 100644 (file)
@@ -4088,6 +4088,14 @@ class FormatterTest(unittest.TestCase, AssertErrorMessage):
         f.converter = time.gmtime
         self.assertEqual(f.formatTime(r), '21/04/1993 08:03:00')
 
+    def test_issue_89047(self):
+        f = logging.Formatter(fmt='{asctime}.{msecs:03.0f} {message}', style='{', datefmt="%Y-%m-%d %H:%M:%S")
+        for i in range(2500):
+            time.sleep(0.0004)
+            r = logging.makeLogRecord({'msg': 'Message %d' % (i + 1)})
+            s = f.format(r)
+            self.assertNotIn('.1000', s)
+
 
 class TestBufferingFormatter(logging.BufferingFormatter):
     def formatHeader(self, records):