diff options
author | Craig Robson <craig@zhatt.com> | 2024-06-27 16:44:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-27 16:44:40 (GMT) |
commit | e9b4ec614b66d11623b80471409c16a109f888d5 (patch) | |
tree | 786322a7c82360c0ad7bf2adacaeefcf48b46525 /Lib | |
parent | 0890ad7c024ccf29614849b6ffadcb92c0e91ce7 (diff) | |
download | cpython-e9b4ec614b66d11623b80471409c16a109f888d5.zip cpython-e9b4ec614b66d11623b80471409c16a109f888d5.tar.gz cpython-e9b4ec614b66d11623b80471409c16a109f888d5.tar.bz2 |
gh-105623 Fix performance degradation in logging RotatingFileHandler (GH-105887)
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>
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/logging/handlers.py | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index 410bd98..0fa40f5 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -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 |