Update of /cvs-repository/Packages/zLOG In directory cvs.zope.org:/tmp/cvs-serv16249
Modified Files: Tag: Zope-2_7-branch LogHandlers.py Log Message: * Implement a file handler with 'rotate'. This closes the file, attempts a rename to {filename}.last, then reopens the original name. This then makes the log available for another process to perform the rotation logic on. This log handler is only installed on the Windows platform, where you can't rename an open file. === Packages/zLOG/LogHandlers.py 1.6.14.2 => 1.6.14.3 === --- Packages/zLOG/LogHandlers.py:1.6.14.2 Thu Oct 2 16:25:53 2003 +++ Packages/zLOG/LogHandlers.py Tue Apr 12 22:59:36 2005 @@ -13,11 +13,13 @@ """Handlers which can plug into a PEP 282 logger.""" import sys +import os from logging import Handler, StreamHandler from logging.handlers import SysLogHandler from logging.handlers import HTTPHandler, SMTPHandler from logging.handlers import NTEventLogHandler as Win32EventLogHandler +import zLOG class FileHandler(StreamHandler): """ @@ -35,6 +37,42 @@ def reopen(self): self.close() self.stream = open(self.baseFilename, self.mode) + +class Win32FileHandler(FileHandler): + """File-based log handler for Windows that supports an additional 'rotate' + method. reopen() is generally useless since Windows cannot do a move on + an open file. + """ + def rotate(self, rotateFilename=None): + if not rotateFilename: + rotateFilename = self.baseFilename + ".last" + error = None + self.close() + try: + os.rename(self.baseFilename, rotateFilename) + except OSError, error: + # logger cannot be used until we get a file handle again, so we + # store it in 'error' + pass + + self.stream = open(self.baseFilename, self.mode) + + if error: + # Note we *expect* to see a "file exists" error if some external + # process has not cleaned up these logs. For now, that just gets + # logged like any other error. + zLOG.LOG("Win32FileLogger", zLOG.ERROR, + "File rotation error moving '%s' to '%s':" % + (self.baseFilename, rotateFilename), error) + else: + zLOG.LOG("Win32FileLogger", zLOG.INFO, + "File rotation moved '%s' to '%s'" % + (self.baseFilename, rotateFilename)) + +if os.name == "nt": + # Make it the default for Windows - we install a 'reopen' handler that + # tries to rotate the logfile. + FileHandler = Win32FileHandler class NullHandler(Handler): """ _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins