summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2012-11-15 14:20:18 (GMT)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2012-11-15 14:20:18 (GMT)
commit8d27023a7e4129609ab005d6e1a437214bca1188 (patch)
treea3741487c0bc7ab45ae17b2a00375661a4ed0b1c
parent8f2b6ad96f15f38593cc68eae2b85390a4bee400 (diff)
downloadcpython-8d27023a7e4129609ab005d6e1a437214bca1188.zip
cpython-8d27023a7e4129609ab005d6e1a437214bca1188.tar.gz
cpython-8d27023a7e4129609ab005d6e1a437214bca1188.tar.bz2
Allow configuration of handler properties.
-rw-r--r--Lib/logging/config.py4
-rw-r--r--Lib/test/test_logging.py35
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")