summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-08-27 14:09:54 (GMT)
committerGitHub <noreply@github.com>2022-08-27 14:09:54 (GMT)
commit103f26f28238b80693a391746bd4509a7a0a227f (patch)
tree7a9a7e5bb0fe034eda26c556d1b494ab48a93265
parent698df306a955fe33670d770107580418e41dd771 (diff)
downloadcpython-103f26f28238b80693a391746bd4509a7a0a227f.zip
cpython-103f26f28238b80693a391746bd4509a7a0a227f.tar.gz
cpython-103f26f28238b80693a391746bd4509a7a0a227f.tar.bz2
[3.11] gh-89047: Fix msecs computation so you never end up with 1000 msecs. (GH-96340) (GH-96341)
-rw-r--r--Lib/logging/__init__.py2
-rw-r--r--Lib/test/test_logging.py8
2 files changed, 9 insertions, 1 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 79e4b7d..458c5fb 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -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()
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 71926a5..5349874 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -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):