summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2010-09-20 09:55:00 (GMT)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2010-09-20 09:55:00 (GMT)
commitb4a0809ad79dbbd9c263b523499b8f0a0136aa7a (patch)
tree05530a4d7b91411c3d28dc05e36f1f28d1400066
parentf1d633c386646d83c03934f47ff064847ff2a3da (diff)
downloadcpython-b4a0809ad79dbbd9c263b523499b8f0a0136aa7a.zip
cpython-b4a0809ad79dbbd9c263b523499b8f0a0136aa7a.tar.gz
cpython-b4a0809ad79dbbd9c263b523499b8f0a0136aa7a.tar.bz2
logging: Add hasHandlers() method to Logger.
-rw-r--r--Lib/logging/__init__.py22
-rw-r--r--Lib/test/test_logging.py11
2 files changed, 28 insertions, 5 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 6332f2f..134d923 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1240,6 +1240,28 @@ class Logger(Filterer):
finally:
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):
"""
Pass a record to all relevant handlers.
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 2630abb..7506dba 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -75,8 +75,8 @@ class BaseTest(unittest.TestCase):
# Set two unused loggers: one non-ASCII and one Unicode.
# This is to test correct operation when sorting existing
# loggers in the configuration code. See issue 8201.
- logging.getLogger("\xab\xd7\xbb")
- logging.getLogger("\u013f\u00d6\u0047")
+ self.logger1 = logging.getLogger("\xab\xd7\xbb")
+ self.logger2 = logging.getLogger("\u013f\u00d6\u0047")
self.root_logger = logging.getLogger("")
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_formatter = logging.Formatter(self.log_format)
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.assertTrue(self.logger1.hasHandlers())
+ self.assertTrue(self.logger2.hasHandlers())
def tearDown(self):
"""Remove our logging stream, and restore the original logging
@@ -1844,7 +1848,6 @@ class RotatingFileHandlerTest(BaseFileTest):
self.assertLogFile(self.fn + ".2")
self.assertFalse(os.path.exists(self.fn + ".3"))
-
class TimedRotatingFileHandlerTest(BaseFileTest):
# test methods added below
pass
@@ -1865,8 +1868,6 @@ for when, exp in (('S', 1),
self.assertEquals(exp, rh.computeRollover(0.0))
setattr(TimedRotatingFileHandlerTest, "test_compute_rollover_%s" % when, test_compute_rollover)
-
-
# 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
# first and restore it at the end.