8000 [3.12] gh-118868: logging QueueHandler fix passing of kwargs (GH-1188… · python/cpython@fe68908 · GitHub
[go: up one dir, main page]

Skip to content

Commit fe68908

Browse files
[3.12] gh-118868: logging QueueHandler fix passing of kwargs (GH-118869) (GH-120031)
(cherry picked from commit dce14bb)
1 parent b5c3394 commit fe68908

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

Lib/logging/config.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -732,16 +732,16 @@ def add_filters(self, filterer, filters):
732732

733733
def _configure_queue_handler(self, klass, **kwargs):
734734
if 'queue' in kwargs:
735-
q = kwargs['queue']
735+
q = kwargs.pop('queue')
736736
else:
737737
q = queue.Queue() # unbounded
738-
rhl = kwargs.get('respect_handler_level', False)
739-
if 'listener' in kwargs:
740-
lklass = kwargs['listener']
741-
else:
742-
lklass = logging.handlers.QueueListener
743-
listener = lklass(q, *kwargs.get('handlers', []), respect_handler_level=rhl)
744-
handler = klass(q)
738+
739+
rhl = kwargs.pop('respect_handler_level', False)
740+
lklass = kwargs.pop('listener', logging.handlers.QueueListener)
741+
handlers = kwargs.pop('handlers', [])
742+
743+
listener = lklass(q, *handlers, respect_handler_level=rhl)
744+
handler = klass(q, **kwargs)
745745
handler.listener = listener
746746
return handler
747747

Lib/test/test_logging.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3944,6 +3944,35 @@ def test_111615(self):
39443944
}
39453945
logging.config.dictConfig(config)
39463946

3947+
# gh-118868: check if kwargs are passed to logging QueueHandler
3948+
def test_kwargs_passing(self):
3949+
class CustomQueueHandler(logging.handlers.QueueHandler):
3950+
def __init__(self, *args, **kwargs):
3951+
super().__init__(queue.Queue())
3952+
self.custom_kwargs = kwargs
3953+
3954+
custom_kwargs = {'foo': 'bar'}
3955+
3956+
config = {
3957+
'version': 1,
3958+
'handlers': {
3959+
'custom': {
3960+
'class': CustomQueueHandler,
3961+
**custom_kwargs
3962+
},
3963+
},
3964+
'root': {
3965+
'level': 'DEBUG',
3966+
'handlers': ['custom']
3967+
}
3968+
}
3969+
3970+
logging.config.dictConfig(config)
3971+
3972+
handler = logging.getHandlerByName('custom')
3973+
self.assertEqual(handler.custom_kwargs, custom_kwargs)
3974+
3975+
39473976
class ManagerTest(BaseTest):
39483977
def test_manager_loggerclass(self):
39493978
logged = []
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed issue where kwargs were no longer passed to the logging handler
2+
QueueHandler

0 commit comments

Comments
 (0)
0