This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Logging handlers do not handle double-closing very well
Type: behavior Stage:
Components: Library (Lib) Versions: Python 3.1, Python 2.6
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: vinay.sajip Nosy List: Jason.Baker, santoso.wijaya, vinay.sajip
Priority: normal Keywords: patch

Created on 2010-04-30 20:34 by Jason.Baker, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
logging.patch Jason.Baker, 2010-04-30 20:36 A patch for this bug
Messages (7)
msg104662 - (view) Author: Jason Baker (Jason.Baker) Date: 2010-04-30 20:34
The logging handler does not handle double-closing very well:

>>> from logging import StreamHandler
>>> h = StreamHandler()
>>> h.close()
>>> h.close()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/logging/__init__.py", line 705, in close
    del _handlers[self]
KeyError: <logging.StreamHandler instance at 0xb7609c8c>

There are two possible approaches to this:

 1. Raise a better error.
 2. Ignore the duplicate close.

This patch takes option 2 as this is likely not indicative of any kind of programmer error, but it shouldn't be too difficult to take option 1 instead.
msg104663 - (view) Author: Jason Baker (Jason.Baker) Date: 2010-04-30 20:36
Adding patch
msg104694 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2010-05-01 07:43
This part of the code has been changed in trunk (to use weak references), and the error does not occur in Python 2.7/3.2.

I'm not sure I fully agree with your assertion that it's not a programmer error to close a handler twice - this could certainly happen as a result of a bug in the application.

So, I'm not sure (now that we're in Python 2.7 beta) that it's worth backporting this to 2.6.6.

Thoughts?
msg104696 - (view) Author: Santoso Wijaya (santoso.wijaya) * Date: 2010-05-01 08:22
File-like objects handle multiple close() gracefully, silently making the second and subsequent close() calls to an already closed I/O object do nothing. Why can't the same expectation be applied to logging handlers?
msg104699 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2010-05-01 09:51
----- Original Message ----

> From: Santoso Wijaya <report@bugs.python.org>
> File-like objects handle multiple close() gracefully, silently 
> making the second and subsequent close() calls to an already closed I/O object 
> do nothing. Why can't the same expectation be applied to logging 
> handlers?

I'm not objecting to the change on philosophical grounds, merely commenting that it doesn't happen in 2.7/3.2 and suggesting it's not worth fixing in 2.6/3.1.
msg104714 - (view) Author: Jason Baker (Jason.Baker) Date: 2010-05-01 13:46
Vinay, I don't necessarily disagree with you.  However, this appears to be  a pretty trivial change.  If there is a 2.6.6, I think this should go in it.
msg104848 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2010-05-03 15:40
Fix checked into release26-maint (r80713).
History
Date User Action Args
2022-04-11 14:57:00adminsetgithub: 52827
2010-05-03 15:40:46vinay.sajipsetstatus: open -> closed
resolution: out of date -> fixed
messages: + msg104848
2010-05-01 13:46:22Jason.Bakersetmessages: + msg104714
2010-05-01 09:51:58vinay.sajipsetmessages: + msg104699
2010-05-01 08:22:52santoso.wijayasetstatus: pending -> open

messages: + msg104696
2010-05-01 07:43:16vinay.sajipsetstatus: open -> pending
resolution: out of date
messages: + msg104694
2010-04-30 21:57:36santoso.wijayasetnosy: + santoso.wijaya
2010-04-30 20:58:33benjamin.petersonsetassignee: vinay.sajip

nosy: + vinay.sajip
2010-04-30 20:36:19Jason.Bakersetfiles: + logging.patch
keywords: + patch
messages: + msg104663
2010-04-30 20:34:30Jason.Bakercreate