]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-105623 Fix performance degradation in logging RotatingFileHandler (GH-105887)
authorCraig Robson <craig@zhatt.com>
Thu, 27 Jun 2024 16:44:40 +0000 (09:44 -0700)
committerGitHub <noreply@github.com>
Thu, 27 Jun 2024 16:44:40 +0000 (16:44 +0000)
The check for whether the log file is a real file is expensive on NFS
filesystems.  This commit reorders the rollover condition checking to
not do the file type check if the expected file size is less than the
rotation threshold.

Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
Lib/logging/handlers.py
Misc/NEWS.d/next/Library/2023-06-17-09-07-06.gh-issue-105623.5G06od.rst [new file with mode: 0644]

index 410bd9851f366dff11398d7c82898c54a3f09bc9..0fa40f56e998d5a433558ed0e9f7e1f29f1a35ce 100644 (file)
@@ -193,15 +193,15 @@ class RotatingFileHandler(BaseRotatingHandler):
         Basically, see if the supplied record would cause the file to exceed
         the size limit we have.
         """
-        # See bpo-45401: Never rollover anything other than regular files
-        if os.path.exists(self.baseFilename) and not os.path.isfile(self.baseFilename):
-            return False
         if self.stream is None:                 # delay was set...
             self.stream = self._open()
         if self.maxBytes > 0:                   # are we rolling over?
             msg = "%s\n" % self.format(record)
             self.stream.seek(0, 2)  #due to non-posix-compliant Windows feature
             if self.stream.tell() + len(msg) >= self.maxBytes:
+                # See bpo-45401: Never rollover anything other than regular files
+                if os.path.exists(self.baseFilename) and not os.path.isfile(self.baseFilename):
+                    return False
                 return True
         return False
 
diff --git a/Misc/NEWS.d/next/Library/2023-06-17-09-07-06.gh-issue-105623.5G06od.rst b/Misc/NEWS.d/next/Library/2023-06-17-09-07-06.gh-issue-105623.5G06od.rst
new file mode 100644 (file)
index 0000000..2890674
--- /dev/null
@@ -0,0 +1,2 @@
+Fix performance degradation in
+:class:`logging.handlers.RotatingFileHandler`. Patch by Craig Robson.