bpo-31080: Allowed logging.config.fileConfig() to accept both args and kwargs. (GH-2979)

This commit is contained in:
Preston Landers 2017-08-02 15:44:28 -05:00 committed by Vinay Sajip
parent de34cbe9cd
commit 6ea56d2ebc
4 changed files with 15 additions and 5 deletions

View File

@ -715,7 +715,12 @@ a corresponding section in the configuration file.
The ``args`` entry, when :func:`eval`\ uated in the context of the ``logging`` The ``args`` entry, when :func:`eval`\ uated in the context of the ``logging``
package's namespace, is the list of arguments to the constructor for the handler package's namespace, is the list of arguments to the constructor for the handler
class. Refer to the constructors for the relevant handlers, or to the examples class. Refer to the constructors for the relevant handlers, or to the examples
below, to see how typical entries are constructed. below, to see how typical entries are constructed. If not provided, it defaults
to ``()``.
The optional ``kwargs`` entry, when :func:`eval`\ uated in the context of the
``logging`` package's namespace, is the keyword argument dict to the constructor
for the handler class. If not provided, it defaults to ``{}``.
.. code-block:: ini .. code-block:: ini
@ -754,6 +759,7 @@ below, to see how typical entries are constructed.
level=WARN level=WARN
formatter=form07 formatter=form07
args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject') args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject')
kwargs={'timeout': 10.0}
[handler_hand08] [handler_hand08]
class=handlers.MemoryHandler class=handlers.MemoryHandler
@ -767,6 +773,7 @@ below, to see how typical entries are constructed.
level=NOTSET level=NOTSET
formatter=form09 formatter=form09
args=('localhost:9022', '/log', 'GET') args=('localhost:9022', '/log', 'GET')
kwargs={'secure': True}
Sections which specify formatter configuration are typified by the following. Sections which specify formatter configuration are typified by the following.

View File

@ -143,9 +143,11 @@ def _install_handlers(cp, formatters):
klass = eval(klass, vars(logging)) klass = eval(klass, vars(logging))
except (AttributeError, NameError): except (AttributeError, NameError):
klass = _resolve(klass) klass = _resolve(klass)
args = section["args"] args = section.get("args", '()')
args = eval(args, vars(logging)) args = eval(args, vars(logging))
h = klass(*args) kwargs = section.get("kwargs", '{}')
kwargs = eval(kwargs, vars(logging))
h = klass(*args, **kwargs)
if "level" in section: if "level" in section:
level = section["level"] level = section["level"]
h.setLevel(level) h.setLevel(level)

View File

@ -1273,7 +1273,7 @@ class ConfigFileTest(BaseTest):
datefmt= datefmt=
""" """
# config7 adds a compiler logger. # config7 adds a compiler logger, and uses kwargs instead of args.
config7 = """ config7 = """
[loggers] [loggers]
keys=root,parser,compiler keys=root,parser,compiler
@ -1304,7 +1304,7 @@ class ConfigFileTest(BaseTest):
class=StreamHandler class=StreamHandler
level=NOTSET level=NOTSET
formatter=form1 formatter=form1
args=(sys.stdout,) kwargs={'stream': sys.stdout,}
[formatter_form1] [formatter_form1]
format=%(levelname)s ++ %(message)s format=%(levelname)s ++ %(message)s

View File

@ -0,0 +1 @@
Allow `logging.config.fileConfig` to accept kwargs and/or args.