Commit 6ea56d2e authored by Preston Landers's avatar Preston Landers Committed by Vinay Sajip

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

parent de34cbe9
...@@ -715,7 +715,12 @@ a corresponding section in the configuration 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. ...@@ -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. ...@@ -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.
......
...@@ -143,9 +143,11 @@ def _install_handlers(cp, formatters): ...@@ -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)
......
...@@ -1273,7 +1273,7 @@ class ConfigFileTest(BaseTest): ...@@ -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): ...@@ -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
......
Allow `logging.config.fileConfig` to accept kwargs and/or args.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment