mirror of
https://github.com/python/cpython
synced 2024-09-30 06:14:05 +00:00
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>
This commit is contained in:
parent
0890ad7c02
commit
e9b4ec614b
|
@ -193,15 +193,15 @@ def shouldRollover(self, record):
|
||||||
Basically, see if the supplied record would cause the file to exceed
|
Basically, see if the supplied record would cause the file to exceed
|
||||||
the size limit we have.
|
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...
|
if self.stream is None: # delay was set...
|
||||||
self.stream = self._open()
|
self.stream = self._open()
|
||||||
if self.maxBytes > 0: # are we rolling over?
|
if self.maxBytes > 0: # are we rolling over?
|
||||||
msg = "%s\n" % self.format(record)
|
msg = "%s\n" % self.format(record)
|
||||||
self.stream.seek(0, 2) #due to non-posix-compliant Windows feature
|
self.stream.seek(0, 2) #due to non-posix-compliant Windows feature
|
||||||
if self.stream.tell() + len(msg) >= self.maxBytes:
|
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 True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix performance degradation in
|
||||||
|
:class:`logging.handlers.RotatingFileHandler`. Patch by Craig Robson.
|
Loading…
Reference in a new issue