[Twisted-Python] [PATCH] make syslog work

Tommi Virtanen tv at twistedmatrix.com
Sat Aug 2 08:27:50 MDT 2003


	Hi. Here's a patch that does a few things to twistd and
	twisted.python.syslog.

	1) twistd: allow using -n and --syslog at the same time,
	   by reordering the elif's.

	2) rewrite twisted.python.syslog to save it from bitrot,
	   I don't think it could have worked at all. To avoid
	   code duplication, refactor twisted.python.log a bit;
	   we don't want twistedy time stamps in syslog, but we
	   want rest of the nice things.

	You have at most a few days to protest, or I will
	commit. Explicitly saying "looks good" appreciated.

Index: twisted/scripts/twistd.py
===================================================================
RCS file: /cvs/Twisted/twisted/scripts/twistd.py,v
retrieving revision 1.53
diff -u -u -r1.53 twistd.py
--- twisted/scripts/twistd.py	19 Jul 2003 21:36:49 -0000	1.53
+++ twisted/scripts/twistd.py	2 Aug 2003 14:46:28 -0000
@@ -282,11 +282,11 @@
             print 'daemons cannot log to stdout'
             os._exit(1)
         logFile = sys.stdout
-    elif config['nodaemon'] and not config['logfile']:
-        logFile = sys.stdout
     elif config['syslog']:
         from twisted.python import syslog
         syslog.startLogging(config['prefix'])
+    elif config['nodaemon'] and not config['logfile']:
+        logFile = sys.stdout
     else:
         logPath = os.path.abspath(config['logfile'] or 'twistd.log')
         logFile = logfile.LogFile(os.path.basename(logPath), os.path.dirname(logPath))
Index: twisted/python/log.py
===================================================================
RCS file: /cvs/Twisted/twisted/python/log.py,v
retrieving revision 1.50
diff -u -u -r1.50 log.py
--- twisted/python/log.py	17 Jul 2003 09:11:33 -0000	1.50
+++ twisted/python/log.py	2 Aug 2003 14:46:29 -0000
@@ -235,6 +235,12 @@
         self.write = f.write
         self.flush = f.flush
 
+    def prefix(self, eventDict):
+        y,mon,d,h,min, iigg,nnoo,rree,daylight = time.localtime(eventDict['time'])
+        return ("%0.4d/%0.2d/%0.2d %0.2d:%0.2d %s [%s] " %
+                (y, mon, d, h, min, time.tzname[daylight],
+                 eventDict['system']))
+
     def _emit(self, eventDict):
         edm = eventDict['message']
         if not edm:
@@ -244,10 +250,10 @@
                 text = eventDict['format'] % eventDict
         else:
             text = ' '.join(map(str, edm))
+        prefix = self.prefix(eventDict)
         y,mon,d,h,min, iigg,nnoo,rree,daylight = time.localtime(eventDict['time'])
-        self.write("%0.4d/%0.2d/%0.2d %0.2d:%0.2d %s [%s] %s\n" %
-                   (y, mon, d, h, min, time.tzname[daylight],
-                    eventDict['system'], text.replace("\n","\n\t")))
+        self.write("%s%s\n" %
+                   (self.prefix(eventDict), text.replace("\n","\n\t")))
         self.flush()                    # hoorj!
 
     def start(self):
@@ -306,8 +312,14 @@
     _oldshowwarning = None
 
 
-def startLogging(file, setStdout=1):
-    """Initialize logging to a specified file. If setStdout is true 
+def startLogging(file, *a, **kw):
+    """Initialize logging to a specified file.
+    """
+    flo = FileLogObserver(file)
+    startLoggingToObserver(flo, *a, **kw)
+
+def startLoggingToObserver(obs, setStdout=1):
+    """Initialize logging to a specified observer. If setStdout is true 
        (defaults to yes), also redirect sys.stdout and sys.stderr 
        to the specified file.
     """
@@ -318,8 +330,7 @@
     if defaultObserver:
         defaultObserver.stop()
         defaultObserver = None
-    flo = FileLogObserver(file)
-    flo.start()
+    obs.start()
     msg("Log opened.")
     if setStdout:
         sys.stdout = logfile
Index: twisted/python/syslog.py
===================================================================
RCS file: /cvs/Twisted/twisted/python/syslog.py,v
retrieving revision 1.1
diff -u -u -r1.1 syslog.py
--- twisted/python/syslog.py	23 Nov 2002 19:54:22 -0000	1.1
+++ twisted/python/syslog.py	2 Aug 2003 14:46:29 -0000
@@ -18,33 +18,25 @@
 import sys
 import log
 
-class SyslogLogger:
-
+class SyslogLogger(log.FileLogObserver):
     def __init__(self, prefix):
-        self.prefix = prefix
+        syslog.openlog(prefix)
+
+    def prefix(self, eventDict):
+        return ("[%s] " % eventDict['system'])
 
     def write(self, data):
         if not data or data=='\n':
             return
-        logger = log.logOwner.owner()
-        if logger:
-            data = logger.log(data)
         data = data.split('\n')
         if not data[-1]:
             data.pop()
         for line in data:
-            syslog.syslog("[%s] %s" % (self.prefix, line))
-
-    def writelines(self, lines):
-        for line in lines:
-            self.write(line)
-
-    def close(self):
-        pass
+            syslog.syslog(line)
 
     def flush(self):
         pass
 
 
-def startLogging(prefix='Twisted'):
-    sys.stdout = sys.stderr = log.logfile = SyslogLogger(prefix)
+def startLogging(prefix='Twisted', setStdout=1):
+    log.startLoggingToObserver(SyslogLogger(prefix), setStdout=setStdout)

-- 
:(){ :|:&};:




More information about the Twisted-Python mailing list