Title: logging.Handler.handlerError() may raise IOError in traceback.print_exception()
Type: behavior Stage:
Components: Library (Lib) Versions: Python 2.6
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: vinay.sajip Nosy List: ryles, vinay.sajip
Priority: normal Keywords:

Created on 2009-05-08 20:55 by ryles, last changed 2009-05-09 12:17 by vinay.sajip. This issue is now closed.

Messages (2)
msg87469 - (view) Author: Ryan Leslie (ryles) Date: 2009-05-08 20:55
When using the logging package, if a StreamHandler is configured with
stderr and stderr is redirected to a pipe which no longer has readers,
then StreamHandler.emit() will result in an IOError for "Broken pipe".
The exception will be handled in logging.Handler.handleError(), which by
default will call traceback.print_exception() with file=sys.stderr. This
will cause in a second IOError exception which will not be caught within
the logging code. Unless the user placed their log calls such as in a try/except block (unlikely), the end result is
termination of the process.

While the logging code itself is certainly not the cause of the
underlying problem, it does seem that the intent of the default
handleError() was to eat exceptions, and possibly print them, without
disturbing the application code. As the docstring correctly points out,
the application can probably survive without the logging.

To work around this issue without writing a custom handler,
raiseExceptions can be set to false. But then the user would miss log
trace when other types of errors not affecting stderr occurred. That is,
I think handleError() does the right thing in trying to print the error,
but suggest that if the print results in an IOError (or certain types of
IOError), then it should be ignored, or optionally ignorable.
msg87492 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2009-05-09 12:17
Fix checked into trunk and release26-maint.
Date User Action Args
2009-05-09 12:17:07vinay.sajipsetstatus: open -> closed
resolution: fixed
messages: + msg87492
2009-05-08 21:08:40benjamin.petersonsetassignee: vinay.sajip

nosy: + vinay.sajip
2009-05-08 20:55:53rylescreate