Repository navigation
Python 3.12 breaks backwards compatibility for logging configuration #111615
Copy link
Copy link
Closed
Labels
3.12only security fixesonly security fixes3.13only security fixesonly security fixesstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
This worked fine on previous versions:
import logging
import logging.config
import logging.handlers
import multiprocessing as mp
def main():
config = {
'version': 1,
'handlers': {
'sink': {
'class': 'logging.handlers.QueueHandler',
'queue': mp.get_context('spawn').Queue(),
},
},
'root': {
'handlers': ['sink'],
'level': 'DEBUG',
},
}
logging.config.dictConfig(config)
if __name__ == '__main__':
main()With Python 3.12, it drops an error:
Traceback (most recent call last):
File "/home/egor/.pyenv/versions/3.12-dev/lib/python3.12/logging/config.py", line 581, in configure
handler = self.configure_handler(handlers[name])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/egor/.pyenv/versions/3.12-dev/lib/python3.12/logging/config.py", line 786, in configure_handler
raise ValueError('No handlers specified for a QueueHandler')
ValueError: No handlers specified for a QueueHandler
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/egor/workspace/personal/cimple/../test.py", line 25, in <module>
main()
File "/home/egor/workspace/personal/cimple/../test.py", line 21, in main
logging.config.dictConfig(config)
File "/home/egor/.pyenv/versions/3.12-dev/lib/python3.12/logging/config.py", line 912, in dictConfig
dictConfigClass(config).configure()
File "/home/egor/.pyenv/versions/3.12-dev/lib/python3.12/logging/config.py", line 588, in configure
raise ValueError('Unable to configure handler '
ValueError: Unable to configure handler 'sink'
More than that, even the example in the Logging Cookbook is broken now: https://docs.python.org/3/howto/logging-cookbook.html#a-more-elaborate-multiprocessing-example (fails with the same error).
Version info:
# python -VV
Python 3.12.0+ (heads/3.12:f108785, Nov 1 2023, 19:47:19) [GCC 13.2.1 20230801]
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
3.12only security fixesonly security fixes3.13only security fixesonly security fixesstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
- StatusShow more project fieldsDone
Activity
vsajip commentedon Nov 2, 2023
Thanks for the report. This is due to a fix for gh-93162 , which allows proper configuration of a
QueueListenerandQueueHandlertogether. I'm sorry about the breakage - it appears not enough consideration was given to configuring aQueuehandlerwithout configuring aQueueListener. This was of course the default case before the change went in, and the cookbook example needs to be updated. How are you configuring theQueueListenerin your environment?egor-tensin commentedon Nov 2, 2023
I'm using
QueueListener/QueueHandlerw/multiprocessingto centralize logging in the parent process logger, which I think is common advise on the net. The complete setup is:To be honest, I don't really understand how the queue & listener can be configured in one call, since I configure them separately in the parent & child processes.
pythongh-111615: Fix regression in QueueHandler configuration.
vsajip commentedon Nov 2, 2023
Well, they can be if you're using threads rather than processes.
egor-tensin commentedon Nov 2, 2023
I understand. I cannot use Python threads though, since I need actual parallel execution (for a number of child processes).
I use a similar pattern in a couple of other projects, where I also must use multiprocessing, since the child process needs to drop permissions, execute as a different user, etc.
vsajip commentedon Nov 2, 2023
Well, the change in the linked PR should resolve this, but it will have to wait for the next release of Python 3.12.
egor-tensin commentedon Nov 2, 2023
Thanks, sounds good!
gh-111615: Fix regression in QueueHandler configuration. (GH-111638)
pythongh-111615: Fix regression in QueueHandler configuration. (pytho…
[3.12] gh-111615: Fix regression in QueueHandler configuration. (GH-1…
pythongh-111615: Fix regression in QueueHandler configuration. (pytho…
pythongh-111615: Fix regression in QueueHandler configuration. (pytho…
pythongh-111615: Fix regression in QueueHandler configuration. (pytho…