]> granicus.if.org Git - python/commitdiff
bpo-31080: Allowed logging.config.fileConfig() to accept both args and kwargs. (GH...
authorPreston Landers <planders@utexas.edu>
Wed, 2 Aug 2017 20:44:28 +0000 (15:44 -0500)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Wed, 2 Aug 2017 20:44:28 +0000 (21:44 +0100)
Doc/library/logging.config.rst
Lib/logging/config.py
Lib/test/test_logging.py
Misc/NEWS.d/next/Library/2017-08-01-18-26-55.bpo-31080.2CFVCO.rst [new file with mode: 0644]

index a7928a0647cc5b9b0ecc8ad2549bb752655fcb2d..06378379c331cffd26a32d5847b646c394913ca6 100644 (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``
 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
-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
 
@@ -754,6 +759,7 @@ below, to see how typical entries are constructed.
    level=WARN
    formatter=form07
    args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject')
+   kwargs={'timeout': 10.0}
 
    [handler_hand08]
    class=handlers.MemoryHandler
@@ -767,6 +773,7 @@ below, to see how typical entries are constructed.
    level=NOTSET
    formatter=form09
    args=('localhost:9022', '/log', 'GET')
+   kwargs={'secure': True}
 
 Sections which specify formatter configuration are typified by the following.
 
index d692514adfef5b69ae75ed14ce64259ce0d6e1a4..b3f4e28796a2bc5593b09d8fd708bf497bd6868f 100644 (file)
@@ -143,9 +143,11 @@ def _install_handlers(cp, formatters):
             klass = eval(klass, vars(logging))
         except (AttributeError, NameError):
             klass = _resolve(klass)
-        args = section["args"]
+        args = section.get("args", '()')
         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:
             level = section["level"]
             h.setLevel(level)
index 36ea07251536edef47663483e467c567e8856b4f..a91cfd4ccd3964a3112be393d5cf675ad6fe0e2e 100644 (file)
@@ -1273,7 +1273,7 @@ class ConfigFileTest(BaseTest):
     datefmt=
     """
 
-    # config7 adds a compiler logger.
+    # config7 adds a compiler logger, and uses kwargs instead of args.
     config7 = """
     [loggers]
     keys=root,parser,compiler
@@ -1304,7 +1304,7 @@ class ConfigFileTest(BaseTest):
     class=StreamHandler
     level=NOTSET
     formatter=form1
-    args=(sys.stdout,)
+    kwargs={'stream': sys.stdout,}
 
     [formatter_form1]
     format=%(levelname)s ++ %(message)s
diff --git a/Misc/NEWS.d/next/Library/2017-08-01-18-26-55.bpo-31080.2CFVCO.rst b/Misc/NEWS.d/next/Library/2017-08-01-18-26-55.bpo-31080.2CFVCO.rst
new file mode 100644 (file)
index 0000000..afa2d53
--- /dev/null
@@ -0,0 +1 @@
+Allow `logging.config.fileConfig` to accept kwargs and/or args.