]> granicus.if.org Git - python/commitdiff
Issue 5013: Fixed bug in FileHandler when delay was set - added fix for RotatingFileH...
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Wed, 21 Jan 2009 00:19:28 +0000 (00:19 +0000)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Wed, 21 Jan 2009 00:19:28 +0000 (00:19 +0000)
Lib/logging/__init__.py
Lib/logging/handlers.py
Misc/NEWS

index ee4355474bf6a639e6c27ef1ed901695b60c1bb5..6296641afdd87d51d74e1afcfe077f4edd34b45b 100644 (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)
 
 #---------------------------------------------------------------------------
index 5930f49c3ab2f13899dbf622579057fb1e835004..d9acb87254ee8a83be5f4e0debe7a54665fdbdd4 100644 (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:
index 9ffe6bee1bfb821af06e82ddfe338c4ce341b9c4..35506cb6f3337016beb7eeb2639a2469ea41cac5 100644 (file)
--- 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
   <http://www.wsgi.org/wsgi/Amendments_1.0>`_.
 
 - 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.