bpo-38716: stop rotating handlers from setting inherited namer and rotator to None (GH-17072)
This commit is contained in:
parent
5c0c325453
commit
519cb8772a
|
@ -48,6 +48,9 @@ class BaseRotatingHandler(logging.FileHandler):
|
||||||
Not meant to be instantiated directly. Instead, use RotatingFileHandler
|
Not meant to be instantiated directly. Instead, use RotatingFileHandler
|
||||||
or TimedRotatingFileHandler.
|
or TimedRotatingFileHandler.
|
||||||
"""
|
"""
|
||||||
|
namer = None
|
||||||
|
rotator = None
|
||||||
|
|
||||||
def __init__(self, filename, mode, encoding=None, delay=False, errors=None):
|
def __init__(self, filename, mode, encoding=None, delay=False, errors=None):
|
||||||
"""
|
"""
|
||||||
Use the specified filename for streamed logging
|
Use the specified filename for streamed logging
|
||||||
|
@ -58,8 +61,6 @@ class BaseRotatingHandler(logging.FileHandler):
|
||||||
self.mode = mode
|
self.mode = mode
|
||||||
self.encoding = encoding
|
self.encoding = encoding
|
||||||
self.errors = errors
|
self.errors = errors
|
||||||
self.namer = None
|
|
||||||
self.rotator = None
|
|
||||||
|
|
||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -5030,6 +5030,25 @@ class RotatingFileHandlerTest(BaseFileTest):
|
||||||
self.assertFalse(os.path.exists(namer(self.fn + ".3")))
|
self.assertFalse(os.path.exists(namer(self.fn + ".3")))
|
||||||
rh.close()
|
rh.close()
|
||||||
|
|
||||||
|
def test_namer_rotator_inheritance(self):
|
||||||
|
class HandlerWithNamerAndRotator(logging.handlers.RotatingFileHandler):
|
||||||
|
def namer(self, name):
|
||||||
|
return name + ".test"
|
||||||
|
|
||||||
|
def rotator(self, source, dest):
|
||||||
|
if os.path.exists(source):
|
||||||
|
os.rename(source, dest + ".rotated")
|
||||||
|
|
||||||
|
rh = HandlerWithNamerAndRotator(
|
||||||
|
self.fn, backupCount=2, maxBytes=1)
|
||||||
|
self.assertEqual(rh.namer(self.fn), self.fn + ".test")
|
||||||
|
rh.emit(self.next_rec())
|
||||||
|
self.assertLogFile(self.fn)
|
||||||
|
rh.emit(self.next_rec())
|
||||||
|
self.assertLogFile(rh.namer(self.fn + ".1") + ".rotated")
|
||||||
|
self.assertFalse(os.path.exists(rh.namer(self.fn + ".1")))
|
||||||
|
rh.close()
|
||||||
|
|
||||||
@support.requires_zlib
|
@support.requires_zlib
|
||||||
def test_rotator(self):
|
def test_rotator(self):
|
||||||
def namer(name):
|
def namer(name):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
logging: change RotatingHandler namer and rotator to class-level attributes. This stops __init__ from setting them to None in the case where a subclass defines them with eponymous methods.
|
Loading…
Reference in New Issue