From 6268cbc77190cf6b4112a272f2870d5361903605 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Wed, 21 Jan 2009 00:19:28 +0000 Subject: Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileHandler and changed header comment slightly. --- Lib/logging/__init__.py | 16 ++++++++-------- Lib/logging/handlers.py | 13 ++++++++----- Misc/NEWS | 17 ++++++++++------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index ee43554..6296641 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -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 " __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) #--------------------------------------------------------------------------- diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py index 5930f49..d9acb87 100644 --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -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: diff --git a/Misc/NEWS b/Misc/NEWS index 9ffe6be..35506cb 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -48,7 +48,7 @@ Core and Builtins Martin von Löwis at http://mail.python.org/pipermail/python-dev/2008-June/080579.html. -- Issue #4604: Some objects of the I/O library could still be used after +- Issue #4604: Some objects of the I/O library could still be used after having been closed (for instance, a read() call could return some previously buffered data). Patch by Dmitry Vasiliev. @@ -137,6 +137,9 @@ Core and Builtins Library ------- +- Issue #5013: Fixed a bug in FileHandler which occurred when the delay + parameter was set. + - Issue #4842: Always append a trailing 'L' when pickling longs using pickle protocol 0. When reading, the 'L' is optional. @@ -146,7 +149,7 @@ Library _check_logger_class from multiprocessing. - Issue #3325: Remove python2.x try: except: imports for old cPickle from - multiprocessing. + multiprocessing. - Issue #4959: inspect.formatargspec now works for keyword only arguments without defaults. @@ -183,8 +186,8 @@ Library - Issue #3638: Remove functions from _tkinter module level that depend on TkappObject to work with multiple threads. -- Issue #4718: Adapt the wsgiref package so that it actually works with - Python 3.x, in accordance with the `official amendments of the spec +- Issue #4718: Adapt the wsgiref package so that it actually works with + Python 3.x, in accordance with the `official amendments of the spec `_. - Issue #4796: Added Decimal.from_float() and Context.create_decimal_from_float() @@ -202,10 +205,10 @@ Library - Issue #4795: inspect.isgeneratorfunction() returns False instead of None when the function is not a generator. -- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case - no MSVC compiler is found under Windows. Original patch by Philip Jenvey. +- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case + no MSVC compiler is found under Windows. Original patch by Philip Jenvey. -- Issue #4646: distutils was choking on empty options arg in the setup +- Issue #4646: distutils was choking on empty options arg in the setup function. Original patch by Thomas Heller. - Issue #3767: Convert Tk object to string in tkColorChooser. -- cgit v0.12