mirror of https://github.com/python/cpython.git
gh-115032: Deprecate support for custom logging handlers with 'strm' argument. (GH-115314)
This commit is contained in:
parent
355ee1a429
commit
28a2fd031e
|
@ -1580,6 +1580,11 @@ Deprecated
|
||||||
or *sequence* as keyword arguments is now deprecated.
|
or *sequence* as keyword arguments is now deprecated.
|
||||||
(Contributed by Kirill Podoprigora in :gh:`121676`.)
|
(Contributed by Kirill Podoprigora in :gh:`121676`.)
|
||||||
|
|
||||||
|
* :mod:`logging`:
|
||||||
|
Support for custom logging handlers with the *strm* argument is deprecated
|
||||||
|
and scheduled for removal in Python 3.16. Define handlers with the *stream*
|
||||||
|
argument instead. (Contributed by Mariusz Felisiak in :gh:`115032`.)
|
||||||
|
|
||||||
* :mod:`!nturl2path`: This module is now deprecated. Call
|
* :mod:`!nturl2path`: This module is now deprecated. Call
|
||||||
:func:`urllib.request.url2pathname` and :func:`~urllib.request.pathname2url`
|
:func:`urllib.request.url2pathname` and :func:`~urllib.request.pathname2url`
|
||||||
instead.
|
instead.
|
||||||
|
|
|
@ -865,6 +865,8 @@ def configure_handler(self, config):
|
||||||
else:
|
else:
|
||||||
factory = klass
|
factory = klass
|
||||||
kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))}
|
kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))}
|
||||||
|
# When deprecation ends for using the 'strm' parameter, remove the
|
||||||
|
# "except TypeError ..."
|
||||||
try:
|
try:
|
||||||
result = factory(**kwargs)
|
result = factory(**kwargs)
|
||||||
except TypeError as te:
|
except TypeError as te:
|
||||||
|
@ -876,6 +878,15 @@ def configure_handler(self, config):
|
||||||
#(e.g. by Django)
|
#(e.g. by Django)
|
||||||
kwargs['strm'] = kwargs.pop('stream')
|
kwargs['strm'] = kwargs.pop('stream')
|
||||||
result = factory(**kwargs)
|
result = factory(**kwargs)
|
||||||
|
|
||||||
|
import warnings
|
||||||
|
warnings.warn(
|
||||||
|
"Support for custom logging handlers with the 'strm' argument "
|
||||||
|
"is deprecated and scheduled for removal in Python 3.16. "
|
||||||
|
"Define handlers with the 'stream' argument instead.",
|
||||||
|
DeprecationWarning,
|
||||||
|
stacklevel=2,
|
||||||
|
)
|
||||||
if formatter:
|
if formatter:
|
||||||
result.setFormatter(formatter)
|
result.setFormatter(formatter)
|
||||||
if level is not None:
|
if level is not None:
|
||||||
|
|
|
@ -3281,6 +3281,37 @@ def format(self, record):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Remove when deprecation ends.
|
||||||
|
class DeprecatedStrmHandler(logging.StreamHandler):
|
||||||
|
def __init__(self, strm=None):
|
||||||
|
super().__init__(stream=strm)
|
||||||
|
|
||||||
|
config_custom_handler_with_deprecated_strm_arg = {
|
||||||
|
"version": 1,
|
||||||
|
"formatters": {
|
||||||
|
"form1": {
|
||||||
|
"format": "%(levelname)s ++ %(message)s",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"handlers": {
|
||||||
|
"hand1": {
|
||||||
|
"class": DeprecatedStrmHandler,
|
||||||
|
"formatter": "form1",
|
||||||
|
"level": "NOTSET",
|
||||||
|
"stream": "ext://sys.stdout",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"loggers": {
|
||||||
|
"compiler.parser": {
|
||||||
|
"level": "DEBUG",
|
||||||
|
"handlers": ["hand1"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"level": "WARNING",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
def apply_config(self, conf):
|
def apply_config(self, conf):
|
||||||
logging.config.dictConfig(conf)
|
logging.config.dictConfig(conf)
|
||||||
|
|
||||||
|
@ -3370,6 +3401,15 @@ def test_config5_ok(self):
|
||||||
self.test_config1_ok(config=self.config5)
|
self.test_config1_ok(config=self.config5)
|
||||||
self.check_handler('hand1', CustomHandler)
|
self.check_handler('hand1', CustomHandler)
|
||||||
|
|
||||||
|
def test_deprecation_warning_custom_handler_with_strm_arg(self):
|
||||||
|
msg = (
|
||||||
|
"Support for custom logging handlers with the 'strm' argument "
|
||||||
|
"is deprecated and scheduled for removal in Python 3.16. "
|
||||||
|
"Define handlers with the 'stream' argument instead."
|
||||||
|
)
|
||||||
|
with self.assertWarnsRegex(DeprecationWarning, msg):
|
||||||
|
self.test_config1_ok(config=self.config_custom_handler_with_deprecated_strm_arg)
|
||||||
|
|
||||||
def test_config6_failure(self):
|
def test_config6_failure(self):
|
||||||
self.assertRaises(Exception, self.apply_config, self.config6)
|
self.assertRaises(Exception, self.apply_config, self.config6)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Support for custom logging handlers with the *strm* argument is deprecated
|
||||||
|
and scheduled for removal in Python 3.16. Define handlers with the *stream*
|
||||||
|
argument instead. Patch by Mariusz Felisiak.
|
Loading…
Reference in New Issue