https://github.com/python/cpython/commit/6d0bb43232dd6ebc5245daa4fe29f07f815f0bad
commit: 6d0bb43232dd6ebc5245daa4fe29f07f815f0bad
branch: main
author: Vinay Sajip <[email protected]>
committer: vsajip <[email protected]>
date: 2024-04-17T13:55:18+01:00
summary:
gh-117975: Ensure flush level is checked when configuring a logging
MemoryHandler. (GH-117976)
files:
M Lib/logging/config.py
M Lib/test/test_logging.py
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index ea37dd7544564a..860e4751207470 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -761,18 +761,20 @@ def configure_handler(self, config):
klass = cname
else:
klass = self.resolve(cname)
- if issubclass(klass, logging.handlers.MemoryHandler) and\
- 'target' in config:
- # Special case for handler which refers to another handler
- try:
- tn = config['target']
- th = self.config['handlers'][tn]
- if not isinstance(th, logging.Handler):
- config.update(config_copy) # restore for deferred cfg
- raise TypeError('target not configured yet')
- config['target'] = th
- except Exception as e:
- raise ValueError('Unable to set target handler %r' % tn)
from e
+ if issubclass(klass, logging.handlers.MemoryHandler):
+ if 'flushLevel' in config:
+ config['flushLevel'] =
logging._checkLevel(config['flushLevel'])
+ if 'target' in config:
+ # Special case for handler which refers to another handler
+ try:
+ tn = config['target']
+ th = self.config['handlers'][tn]
+ if not isinstance(th, logging.Handler):
+ config.update(config_copy) # restore for deferred
cfg
+ raise TypeError('target not configured yet')
+ config['target'] = th
+ except Exception as e:
+ raise ValueError('Unable to set target handler %r' %
tn) from e
elif issubclass(klass, logging.handlers.QueueHandler):
# Another special case for handler which refers to other
handlers
# if 'handlers' not in config:
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 3f0b363066df2c..826b7381686dcb 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -3036,6 +3036,30 @@ def format(self, record):
},
}
+ config18 = {
+ "version": 1,
+ "handlers": {
+ "console": {
+ "class": "logging.StreamHandler",
+ "level": "DEBUG",
+ },
+ "buffering": {
+ "class": "logging.handlers.MemoryHandler",
+ "capacity": 5,
+ "target": "console",
+ "level": "DEBUG",
+ "flushLevel": "ERROR"
+ }
+ },
+ "loggers": {
+ "mymodule": {
+ "level": "DEBUG",
+ "handlers": ["buffering"],
+ "propagate": "true"
+ }
+ }
+ }
+
bad_format = {
"version": 1,
"formatters": {
@@ -3522,6 +3546,11 @@ def test_config17_ok(self):
h = logging._handlers['hand1']
self.assertEqual(h.formatter.custom_property, 'value')
+ def test_config18_ok(self):
+ self.apply_config(self.config18)
+ handler = logging.getLogger('mymodule').handlers[0]
+ self.assertEqual(handler.flushLevel, logging.ERROR)
+
def setup_via_listener(self, text, verify=None):
text = text.encode("utf-8")
# Ask for a randomly assigned port (by using port 0)
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]