Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileHandler and changed header comment slightly.

This commit is contained in:
Vinay Sajip 2009-01-21 00:19:28 +00:00
parent b14043c1ec
commit 6268cbc771
3 changed files with 26 additions and 20 deletions

View file

@ -18,7 +18,7 @@
Logging package for Python. Based on PEP 282 and comments thereto in
comp.lang.python, and influenced by Apache's log4j system.
Copyright (C) 2001-2008 Vinay Sajip. All Rights Reserved.
Copyright (C) 2001-2009 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging' and log away!
"""
@ -43,8 +43,8 @@ except ImportError:
__author__ = "Vinay Sajip <vinay_sajip@red-dove.com>"
__status__ = "production"
__version__ = "0.5.0.6"
__date__ = "03 December 2008"
__version__ = "0.5.0.7"
__date__ = "20 January 2009"
#---------------------------------------------------------------------------
# Miscellaneous module data
@ -737,7 +737,6 @@ class StreamHandler(Handler):
if strm is None:
strm = sys.stderr
self.stream = strm
self.formatter = None
def flush(self):
"""
@ -792,10 +791,12 @@ class FileHandler(StreamHandler):
self.mode = mode
self.encoding = encoding
if delay:
#We don't open the stream, but we still need to call the
#Handler constructor to set level, formatter, lock etc.
Handler.__init__(self)
self.stream = None
else:
stream = self._open()
StreamHandler.__init__(self, stream)
StreamHandler.__init__(self, self._open())
def close(self):
"""
@ -827,8 +828,7 @@ class FileHandler(StreamHandler):
constructor, open it before calling the superclass's emit.
"""
if self.stream is None:
stream = self._open()
StreamHandler.__init__(self, stream)
self.stream = self._open()
StreamHandler.emit(self, record)
#---------------------------------------------------------------------------

View file

@ -19,9 +19,9 @@ Additional handlers for the logging package for Python. The core package is
based on PEP 282 and comments thereto in comp.lang.python, and influenced by
Apache's log4j system.
Copyright (C) 2001-2008 Vinay Sajip. All Rights Reserved.
Copyright (C) 2001-2009 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging' and log away!
To use, simply 'import logging.handlers' and log away!
"""
import logging, socket, os, pickle, struct, time, re
@ -112,8 +112,8 @@ class RotatingFileHandler(BaseRotatingHandler):
"""
Do a rollover, as described in __init__().
"""
self.stream.close()
if self.stream:
self.stream.close()
if self.backupCount > 0:
for i in range(self.backupCount - 1, 0, -1):
sfn = "%s.%d" % (self.baseFilename, i)
@ -138,6 +138,8 @@ class RotatingFileHandler(BaseRotatingHandler):
Basically, see if the supplied record would cause the file to exceed
the size limit we have.
"""
if self.stream is None: # delay was set...
self.stream = self._open()
if self.maxBytes > 0: # are we rolling over?
msg = "%s\n" % self.format(record)
self.stream.seek(0, 2) #due to non-posix-compliant Windows feature
@ -302,7 +304,8 @@ class TimedRotatingFileHandler(BaseRotatingHandler):
then we have to get a list of matching filenames, sort them and remove
the one with the oldest suffix.
"""
self.stream.close()
if self.stream:
self.stream.close()
# get the time that this sequence started at and make it a TimeTuple
t = self.rolloverAt - self.interval
if self.utc: