diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2010-03-22 15:29:01 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2010-03-22 15:29:01 (GMT) |
commit | 804899b4ab873144ffc12c145fc4266489454c21 (patch) | |
tree | c89bb1594b095118133cce17144ce430f8c1c3e2 /Lib | |
parent | 73c22e9df2ec56ae5ff756d4af39d819a43af178 (diff) | |
download | cpython-804899b4ab873144ffc12c145fc4266489454c21.zip cpython-804899b4ab873144ffc12c145fc4266489454c21.tar.gz cpython-804899b4ab873144ffc12c145fc4266489454c21.tar.bz2 |
logging: Added getChild utility method to Logger and added isEnabledFor method to LoggerAdapter.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/logging/__init__.py | 25 | ||||
-rw-r--r-- | Lib/test/test_logging.py | 20 |
2 files changed, 44 insertions, 1 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 088c1fc..239ae61 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -1316,6 +1316,25 @@ class Logger(Filterer): return 0 return level >= self.getEffectiveLevel() + def getChild(self, suffix): + """ + Get a logger which is a descendant to this one. + + This is a convenience method, such that + + logging.getLogger('abc').getChild('def.ghi') + + is the same as + + logging.getLogger('abc.def.ghi') + + It's useful, for example, when the parent logger is named using + __name__ rather than a literal string. + """ + if self.root is not self: + suffix = '.'.join((self.name, suffix)) + return self.manager.getLogger(suffix) + class RootLogger(Logger): """ A root logger is not that different to any other logger, except that @@ -1420,6 +1439,12 @@ class LoggerAdapter(object): msg, kwargs = self.process(msg, kwargs) self.logger.log(level, msg, *args, **kwargs) + def isEnabledFor(self, level): + """ + See if the underlying logger is enabled for the specified level. + """ + return self.logger.isEnabledFor(level) + root = RootLogger(WARNING) Logger.root = root Logger.manager = Manager(Logger.root) diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index a918d6e..432493b 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -1736,6 +1736,23 @@ class ManagerTest(BaseTest): self.assertEqual(logged, ['should appear in logged']) +class ChildLoggerTest(BaseTest): + def test_child_loggers(self): + r = logging.getLogger() + l1 = logging.getLogger('abc') + l2 = logging.getLogger('def.ghi') + c1 = r.getChild('xyz') + c2 = r.getChild('uvw.xyz') + self.assertTrue(c1 is logging.getLogger('xyz')) + self.assertTrue(c2 is logging.getLogger('uvw.xyz')) + c1 = l1.getChild('def') + c2 = c1.getChild('ghi') + c3 = l1.getChild('def.ghi') + self.assertTrue(c1 is logging.getLogger('abc.def')) + self.assertTrue(c2 is logging.getLogger('abc.def.ghi')) + self.assertTrue(c2 is c3) + + # 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. @@ -1744,7 +1761,8 @@ def test_main(): run_unittest(BuiltinLevelsTest, BasicFilterTest, CustomLevelsAndFiltersTest, MemoryHandlerTest, ConfigFileTest, SocketHandlerTest, MemoryTest, - EncodingTest, WarningsTest, ConfigDictTest, ManagerTest) + EncodingTest, WarningsTest, ConfigDictTest, ManagerTest, + ChildLoggerTest) if __name__ == "__main__": test_main() |