diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2012-11-15 14:20:18 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2012-11-15 14:20:18 (GMT) |
commit | 8d27023a7e4129609ab005d6e1a437214bca1188 (patch) | |
tree | a3741487c0bc7ab45ae17b2a00375661a4ed0b1c | |
parent | 8f2b6ad96f15f38593cc68eae2b85390a4bee400 (diff) | |
download | cpython-8d27023a7e4129609ab005d6e1a437214bca1188.zip cpython-8d27023a7e4129609ab005d6e1a437214bca1188.tar.gz cpython-8d27023a7e4129609ab005d6e1a437214bca1188.tar.bz2 |
Allow configuration of handler properties.
-rw-r--r-- | Lib/logging/config.py | 4 | ||||
-rw-r--r-- | Lib/test/test_logging.py | 35 |
2 files changed, 39 insertions, 0 deletions
diff --git a/Lib/logging/config.py b/Lib/logging/config.py index 0694d21..ef7d2bc 100644 --- a/Lib/logging/config.py +++ b/Lib/logging/config.py @@ -710,6 +710,7 @@ class DictConfigurator(BaseConfigurator): 'address' in config: config['address'] = self.as_tuple(config['address']) factory = klass + props = config.pop('.', None) kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) try: result = factory(**kwargs) @@ -728,6 +729,9 @@ class DictConfigurator(BaseConfigurator): result.setLevel(logging._checkLevel(level)) if filters: self.add_filters(result, filters) + if props: + for name, value in props.items(): + setattr(result, name, value) return result def add_handlers(self, logger, handlers): diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 9251453..54ab486 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -2389,6 +2389,32 @@ class ConfigDictTest(BaseTest): }, } + # As config0, but with properties + config14 = { + 'version': 1, + 'formatters': { + 'form1' : { + 'format' : '%(levelname)s ++ %(message)s', + }, + }, + 'handlers' : { + 'hand1' : { + 'class' : 'logging.StreamHandler', + 'formatter' : 'form1', + 'level' : 'NOTSET', + 'stream' : 'ext://sys.stdout', + '.': { + 'foo': 'bar', + 'terminator': '!\n', + } + }, + }, + 'root' : { + 'level' : 'WARNING', + 'handlers' : ['hand1'], + }, + } + def apply_config(self, conf): logging.config.dictConfig(conf) @@ -2625,6 +2651,15 @@ class ConfigDictTest(BaseTest): def test_config13_failure(self): self.assertRaises(Exception, self.apply_config, self.config13) + def test_config14_ok(self): + with captured_stdout() as output: + self.apply_config(self.config14) + h = logging._handlers['hand1'] + self.assertEqual(h.foo, 'bar') + self.assertEqual(h.terminator, '!\n') + logging.warning('Exclamation') + self.assertTrue(output.getvalue().endswith('Exclamation!\n')) + @unittest.skipUnless(threading, 'listen() needs threading to work') def setup_via_listener(self, text, verify=None): text = text.encode("utf-8") |