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

Reply via email to