Python 3.12 breaks backwards compatibility for logging configuration
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