[Zodb-checkins] CVS: Zope/lib/python/ZConfig/components/logger - loghandler.py:1.3

Fred L. Drake, Jr. fred at zope.com
Thu Apr 22 16:20:42 EDT 2004


Update of /cvs-repository/Zope/lib/python/ZConfig/components/logger
In directory cvs.zope.org:/tmp/cvs-serv28349/lib/python/ZConfig/components/logger

Modified Files:
	loghandler.py 
Log Message:
cleanly separate the debug logging handler from the startup logging handler;
these must be controllable separately


=== Zope/lib/python/ZConfig/components/logger/loghandler.py 1.2 => 1.3 ===
--- Zope/lib/python/ZConfig/components/logger/loghandler.py:1.2	Tue Apr 13 13:05:52 2004
+++ Zope/lib/python/ZConfig/components/logger/loghandler.py	Thu Apr 22 16:20:11 2004
@@ -17,7 +17,7 @@
 import sys
 
 from logging import Handler, StreamHandler
-from logging.handlers import SysLogHandler
+from logging.handlers import SysLogHandler, BufferingHandler
 from logging.handlers import HTTPHandler, SMTPHandler
 from logging.handlers import NTEventLogHandler as Win32EventLogHandler
 
@@ -53,32 +53,19 @@
         pass
 
 
-class StartupHandler(Handler):
-    """
-    A handler which outputs messages to a stream but also buffers them until
-    they can be flushed to a target handler.  Useful at startup before we can
-    know that we can safely write to a config-specified handler.
+class StartupHandler(BufferingHandler):
+    """Handler which stores messages in a buffer until later.
+
+    This is useful at startup before we can know that we can safely
+    write to a configuration-specified handler.
     """
-    def __init__(self, stream=None):
-        Handler.__init__(self)
-        if not stream:
-            stream = sys.stderr
-        self.stream = stream
-        self.buffer = []
 
-    def emit(self, record):
-        try:
-            self.buffer.append(record)
-            msg = self.format(record)
-            self.stream.write("%s\n" % msg)
-            self.flush()
-        except:
-            self.handleError(record)
+    def __init__(self):
+        BufferingHandler.__init__(self, sys.maxint)
 
-    def flush(self):
-        self.stream.flush()
+    def shouldFlush(self, record):
+        return False
 
     def flushBufferTo(self, target):
-        for record in self.buffer:
-            target.handle(record)
-        self.buffer = []
+        while self.buffer:
+            target.handle(self.buffer.pop(0))




More information about the Zodb-checkins mailing list