mirror of https://github.com/python/cpython.git
[3.13] gh-105623 Fix performance degradation in logging RotatingFileHandler (GH-105887) (GH-121117)
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.
(cherry picked from commit e9b4ec614b
)
Co-authored-by: Craig Robson <craig@zhatt.com>
Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
This commit is contained in:
parent
d5441f6aac
commit
e310d2bd71
|
@ -193,15 +193,15 @@ def shouldRollover(self, record):
|
|||
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
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix performance degradation in
|
||||
:class:`logging.handlers.RotatingFileHandler`. Patch by Craig Robson.
|
Loading…
Reference in New Issue