New submission from Ellis Percival <python....@failcode.co.uk>:
Since https://github.com/python/cpython/commit/b6c1989168efeb8b6320bec958e7e339270ac0ce dictConfig (and presumably fileConfig) has called logging.shutdown() on the existing handlers. This causes existing SysLogHandlers' sockets to be closed, which then causes a BadFileDescriptor error when you try to use it: --- Logging error --- Traceback (most recent call last): File "/usr/lib/python3.8/logging/handlers.py", line 940, in emit self.socket.sendto(msg, self.address) OSError: [Errno 9] Bad file descriptor Call stack: File "/home/flyte/workspaces/python/test.py", line 18, in <module> log.warning("Breaks") Reproduce the error with the following code: import logging.config import socket from logging.handlers import SysLogHandler log = logging.getLogger("logtest") syslog_handler = SysLogHandler(("127.0.0.1", 12345), socktype=socket.SOCK_DGRAM) log.addHandler(syslog_handler) log.warning("Works") logging.config.dictConfig( { "version": 1, "disable_existing_loggers": False, } ) log.warning("Breaks") This causes issues such as https://github.com/benoitc/gunicorn/issues/2073 where gunicorn sets up a SysLogHandler, then when any app (Django does it by default) calls dictConfig() it closes the socket used by gunicorn's SysLogHandler. Assuming this also affects Python 3.9 and 3.10, but untested. ---------- components: Library (Lib) messages: 386805 nosy: flyte priority: normal severity: normal status: open title: logging.config.dictConfig shuts down socket for existing SysLogHandlers type: crash versions: Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43196> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com