[Twisted-Python] Re: Addition to twisted.python.logfile

John Abel john.abel at pa.press.net
Fri Oct 18 07:29:08 EDT 2002


Hi,

Enclosed is an updated logfile.py, with zlib detection - If zlib isn't
imported, compression is turned off.  Please feel to free to
include/tidy up as appropriate.  I've tested the example rotatelog
script with the new logfile.py, on a 10MB file, and it takes around 6-8
seconds to compress, on my laptop (P3-700, 256MB, Mandrake9, Python
2.2.2).

Regards

John

--- /usr/local/lib/python2.2/site-packages/twisted/python/logfile.py
2002-10-18 10:22:17.000000000 +0100
+++
/usr/local/lib/python2.2/site-packages/twisted/python/logfileII.py
2002-10-18 11:57:40.000000000 +0100
@@ -20,7 +20,14 @@
  """

  # System Imports
-import os, stat, glob, string
+import os, stat, glob, string, fileinput, re
+
+try:
+    import gzip
+except ImportError:
+    zlibInstalled = 0
+else:
+    zlibInstalled = 1

  # sibling imports

@@ -34,13 +41,21 @@
      """

      synchronized = ["write", "rotate"]
-

-    def __init__(self, name, directory, rotateLength=1000000):
+
+    def __init__(self, name, directory, rotateLength=1000000,
compressLog=0):
          self.directory = directory
          self.name = name
          self.path = os.path.join(directory, name)
          self.rotateLength = rotateLength
+        if not (compressLog in [0,1] or zlibInstalled):
+            self.compressLog = 0
+        else:
+            self.compressLog = compressLog
+
+        self.globFilePattern = ["%s.*", "%s.*.gz"]
+        self.renameFilePattern = ["%s.%d","%s.%d.gz"]
+        self.rePattern = [".*\.(\d)$",".*\.(\d)\.gz$"]
          self._openFile()

      def _openFile(self):
@@ -87,11 +102,13 @@
      def listLogs(self):
          """Return sorted list of integers - the old logs' identifiers."""
          result = []
-        for name in glob.glob("%s.*" % self.path):
+        for name in glob.glob(self.globFilePattern[self.compressLog] %
self.path):
              try:
-                counter = int(string.split(name, '.')[-1])
-                if counter:
-                    result.append(counter)
+                reCounter = re.match(self.rePattern[self.compressLog],name)
+                if reCounter:
+                    counter = int( reCounter.group(1) )
+                    if counter:
+                        result.append(counter)
              except ValueError:
                  pass
          result.sort()
@@ -108,9 +125,14 @@
          logs = self.listLogs()
          logs.reverse()
          for i in logs:
-            os.rename("%s.%d" % (self.path, i), "%s.%d" % (self.path, i
+ 1))
+            os.rename(self.renameFilePattern[self.compressLog] %
(self.path, i), self.renameFilePattern[self.compressLog] % (self.path, i
+ 1))
          self._file.close()
          os.rename(self.path, "%s.1" % self.path)
+        if self.compressLog:
+            gZippedFile = gzip.GzipFile("%s.1.gz" % self.path,'wb')
+            for LogLine in fileinput.input("%s.1" % self.path):
+                gZippedFile.write(LogLine)
+            gZippedFile.close()
          self._openFile()

      def getCurrentLog(self):
@@ -143,8 +165,6 @@
              line = self._file.readline()
              if not line:
                  break
-            result.append(line)
-        return result
-
      def close(self):
          self._file.close()
+






More information about the Twisted-Python mailing list