If address is specified as a string, a UNIX socket is used. To log to a
local syslogd, "SysLogHandler(address="/dev/log")" can be used.
-- If facility is not specified, LOG_USER is used.
++ If facility is not specified, LOG_USER is used. If socktype is
++ specified as socket.SOCK_DGRAM or socket.SOCK_STREAM, that specific
++ socket type will be used. For Unix sockets, you can also specify a
++ socktype of None, in which case socket.SOCK_DGRAM will be used, falling
++ back to socket.SOCK_STREAM.
"""
logging.Handler.__init__(self)
self.formatter = None
def _connect_unixsocket(self, address):
- self.socket = socket.socket(socket.AF_UNIX, self.socktype)
+ use_socktype = self.socktype
+ if use_socktype is None:
+ use_socktype = socket.SOCK_DGRAM
+ self.socket = socket.socket(socket.AF_UNIX, use_socktype)
try:
self.socket.connect(address)
- except socket.error:
+ # it worked, so set self.socktype to the used type
+ self.socktype = use_socktype
+ except OSError:
self.socket.close()
- raise
+ if self.socktype is not None:
+ # user didn't specify falling back, so fail
+ raise
+ use_socktype = socket.SOCK_STREAM
+ self.socket = socket.socket(socket.AF_UNIX, use_socktype)
+ try:
+ self.socket.connect(address)
+ # it worked, so set self.socktype to the used type
+ self.socktype = use_socktype
- except socket.error:
++ except OSError:
+ self.socket.close()
+ raise
def encodePriority(self, facility, priority):
"""
Library
-------
+ - Issue #17795: Reverted backwards-incompatible change in SysLogHandler with
+ Unix domain sockets.
+
+- Issue #16694: Add a pure Python implementation of the operator module.
+ Patch by Zachary Ware.
+
+- Issue #11182: remove the unused and undocumented pydoc.Scanner class.
+ Patch by Martin Morrison.
+
+- Issue #17741: Add ElementTree.IncrementalParser, an event-driven parser
+ for non-blocking applications.
+
- Issue #17555: Fix ForkAwareThreadLock so that size of after fork
registry does not grow exponentially with generation of process.