]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Improved SysLogHandler error recovery (patch by Erik Forsberg)
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Thu, 13 Jan 2005 08:23:56 +0000 (08:23 +0000)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Thu, 13 Jan 2005 08:23:56 +0000 (08:23 +0000)
Lib/logging/handlers.py

index 19aefa64a363738eab18ee4417383be436c796c4..672422b2e7b3a5a363509e7d3b6fe49063ec5633 100644 (file)
@@ -555,14 +555,7 @@ class SysLogHandler(logging.Handler):
         self.address = address
         self.facility = facility
         if type(address) == types.StringType:
-            self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
-            # syslog may require either DGRAM or STREAM sockets
-            try:
-                self.socket.connect(address)
-            except socket.error:
-                self.socket.close()
-                self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-            self.socket.connect(address)
+            self._connect_unixsocket(address)
             self.unixsocket = 1
         else:
             self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
@@ -570,6 +563,16 @@ class SysLogHandler(logging.Handler):
 
         self.formatter = None
 
+    def _connect_unixsocket(self, address):
+        self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
+        # syslog may require either DGRAM or STREAM sockets
+        try:
+            self.socket.connect(address)
+        except socket.error:
+            self.socket.close()
+            self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+        self.socket.connect(address)
+
     # curious: when talking to the unix-domain '/dev/log' socket, a
     #   zero-terminator seems to be required.  this string is placed
     #   into a class variable so that it can be overridden if
@@ -615,7 +618,11 @@ class SysLogHandler(logging.Handler):
             msg)
         try:
             if self.unixsocket:
-                self.socket.send(msg)
+                try:
+                    self.socket.send(msg)
+                except socket.error:
+                    self._connect_unixsocket(self.address)
+                    self.socket.send(msg)
             else:
                 self.socket.sendto(msg, self.address)
         except: