]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-118868: logging QueueHandler fix passing of kwargs (GH-118869)
authorKaundur <kaundur@protonmail.com>
Tue, 4 Jun 2024 11:48:05 +0000 (12:48 +0100)
committerGitHub <noreply@github.com>
Tue, 4 Jun 2024 11:48:05 +0000 (12:48 +0100)
Co-authored-by: Nice Zombies <nineteendo19d0@gmail.com>
Co-authored-by: Vinay Sajip <vinay_sajip@yahoo.co.uk>
Lib/logging/config.py
Lib/test/test_logging.py
Misc/NEWS.d/next/Library/2024-05-09-21-36-11.gh-issue-118868.uckxxP.rst [new file with mode: 0644]

index 860e475120747044f3405e6b12c81e8dd8ec81b3..ac45d6809c805caec6555aeba2450a454e71f696 100644 (file)
@@ -725,16 +725,16 @@ class DictConfigurator(BaseConfigurator):
 
     def _configure_queue_handler(self, klass, **kwargs):
         if 'queue' in kwargs:
-            q = kwargs['queue']
+            q = kwargs.pop('queue')
         else:
             q = queue.Queue()  # unbounded
-        rhl = kwargs.get('respect_handler_level', False)
-        if 'listener' in kwargs:
-            lklass = kwargs['listener']
-        else:
-            lklass = logging.handlers.QueueListener
-        listener = lklass(q, *kwargs.get('handlers', []), respect_handler_level=rhl)
-        handler = klass(q)
+
+        rhl = kwargs.pop('respect_handler_level', False)
+        lklass = kwargs.pop('listener', logging.handlers.QueueListener)
+        handlers = kwargs.pop('handlers', [])
+
+        listener = lklass(q, *handlers, respect_handler_level=rhl)
+        handler = klass(q, **kwargs)
         handler.listener = listener
         return handler
 
index 97d7c9fb167ec123df30748243f5284a4957c3dd..9ebd3457a18d682e014d4c3942cef04f074de3ee 100644 (file)
@@ -3976,6 +3976,35 @@ class ConfigDictTest(BaseTest):
         }
         logging.config.dictConfig(config)
 
+    # gh-118868: check if kwargs are passed to logging QueueHandler
+    def test_kwargs_passing(self):
+        class CustomQueueHandler(logging.handlers.QueueHandler):
+            def __init__(self, *args, **kwargs):
+                super().__init__(queue.Queue())
+                self.custom_kwargs = kwargs
+
+        custom_kwargs = {'foo': 'bar'}
+
+        config = {
+            'version': 1,
+            'handlers': {
+                'custom': {
+                    'class': CustomQueueHandler,
+                    **custom_kwargs
+                },
+            },
+            'root': {
+                'level': 'DEBUG',
+                'handlers': ['custom']
+            }
+        }
+
+        logging.config.dictConfig(config)
+
+        handler = logging.getHandlerByName('custom')
+        self.assertEqual(handler.custom_kwargs, custom_kwargs)
+
+
 class ManagerTest(BaseTest):
     def test_manager_loggerclass(self):
         logged = []
diff --git a/Misc/NEWS.d/next/Library/2024-05-09-21-36-11.gh-issue-118868.uckxxP.rst b/Misc/NEWS.d/next/Library/2024-05-09-21-36-11.gh-issue-118868.uckxxP.rst
new file mode 100644 (file)
index 0000000..372a809
--- /dev/null
@@ -0,0 +1,2 @@
+Fixed issue where kwargs were no longer passed to the logging handler
+QueueHandler