mirror of
https://github.com/python/cpython.git
synced 2025-10-28 01:00:34 +00:00
logging: Add hasHandlers() method to Logger.
This commit is contained in:
parent
f1d633c386
commit
b4a0809ad7
2 changed files with 28 additions and 5 deletions
|
|
@ -1240,6 +1240,28 @@ class Logger(Filterer):
|
||||||
finally:
|
finally:
|
||||||
hdlr.release()
|
hdlr.release()
|
||||||
|
|
||||||
|
def hasHandlers(self):
|
||||||
|
"""
|
||||||
|
See if this logger has any handlers configured.
|
||||||
|
|
||||||
|
Loop through all handlers for this logger and its parents in the
|
||||||
|
logger hierarchy. Return True if a handler was found, else False.
|
||||||
|
Stop searching up the hierarchy whenever a logger with the "propagate"
|
||||||
|
attribute set to zero is found - that will be the last logger which
|
||||||
|
is checked for the existence of handlers.
|
||||||
|
"""
|
||||||
|
c = self
|
||||||
|
rv = False
|
||||||
|
while c:
|
||||||
|
if c.handlers:
|
||||||
|
rv = True
|
||||||
|
break
|
||||||
|
if not c.propagate:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
c = c.parent
|
||||||
|
return rv
|
||||||
|
|
||||||
def callHandlers(self, record):
|
def callHandlers(self, record):
|
||||||
"""
|
"""
|
||||||
Pass a record to all relevant handlers.
|
Pass a record to all relevant handlers.
|
||||||
|
|
|
||||||
|
|
@ -75,8 +75,8 @@ class BaseTest(unittest.TestCase):
|
||||||
# Set two unused loggers: one non-ASCII and one Unicode.
|
# Set two unused loggers: one non-ASCII and one Unicode.
|
||||||
# This is to test correct operation when sorting existing
|
# This is to test correct operation when sorting existing
|
||||||
# loggers in the configuration code. See issue 8201.
|
# loggers in the configuration code. See issue 8201.
|
||||||
logging.getLogger("\xab\xd7\xbb")
|
self.logger1 = logging.getLogger("\xab\xd7\xbb")
|
||||||
logging.getLogger("\u013f\u00d6\u0047")
|
self.logger2 = logging.getLogger("\u013f\u00d6\u0047")
|
||||||
|
|
||||||
self.root_logger = logging.getLogger("")
|
self.root_logger = logging.getLogger("")
|
||||||
self.original_logging_level = self.root_logger.getEffectiveLevel()
|
self.original_logging_level = self.root_logger.getEffectiveLevel()
|
||||||
|
|
@ -86,7 +86,11 @@ class BaseTest(unittest.TestCase):
|
||||||
self.root_hdlr = logging.StreamHandler(self.stream)
|
self.root_hdlr = logging.StreamHandler(self.stream)
|
||||||
self.root_formatter = logging.Formatter(self.log_format)
|
self.root_formatter = logging.Formatter(self.log_format)
|
||||||
self.root_hdlr.setFormatter(self.root_formatter)
|
self.root_hdlr.setFormatter(self.root_formatter)
|
||||||
|
self.assertFalse(self.logger1.hasHandlers())
|
||||||
|
self.assertFalse(self.logger2.hasHandlers())
|
||||||
self.root_logger.addHandler(self.root_hdlr)
|
self.root_logger.addHandler(self.root_hdlr)
|
||||||
|
self.assertTrue(self.logger1.hasHandlers())
|
||||||
|
self.assertTrue(self.logger2.hasHandlers())
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
"""Remove our logging stream, and restore the original logging
|
"""Remove our logging stream, and restore the original logging
|
||||||
|
|
@ -1844,7 +1848,6 @@ class RotatingFileHandlerTest(BaseFileTest):
|
||||||
self.assertLogFile(self.fn + ".2")
|
self.assertLogFile(self.fn + ".2")
|
||||||
self.assertFalse(os.path.exists(self.fn + ".3"))
|
self.assertFalse(os.path.exists(self.fn + ".3"))
|
||||||
|
|
||||||
|
|
||||||
class TimedRotatingFileHandlerTest(BaseFileTest):
|
class TimedRotatingFileHandlerTest(BaseFileTest):
|
||||||
# test methods added below
|
# test methods added below
|
||||||
pass
|
pass
|
||||||
|
|
@ -1865,8 +1868,6 @@ for when, exp in (('S', 1),
|
||||||
self.assertEquals(exp, rh.computeRollover(0.0))
|
self.assertEquals(exp, rh.computeRollover(0.0))
|
||||||
setattr(TimedRotatingFileHandlerTest, "test_compute_rollover_%s" % when, test_compute_rollover)
|
setattr(TimedRotatingFileHandlerTest, "test_compute_rollover_%s" % when, test_compute_rollover)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Set the locale to the platform-dependent default. I have no idea
|
# Set the locale to the platform-dependent default. I have no idea
|
||||||
# why the test does this, but in any case we save the current locale
|
# why the test does this, but in any case we save the current locale
|
||||||
# first and restore it at the end.
|
# first and restore it at the end.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue