summaryrefslogtreecommitdiffstats
path: root/Lib/logging
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2012-10-31 23:49:19 (GMT)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2012-10-31 23:49:19 (GMT)
commitd06d5403de5409be3db7c8218ecd8400cd94f40d (patch)
treee828245e5e936a85f8a74655198fd3d1b3064940 /Lib/logging
parenta889d801edab20b70dc8aba33763d76e82568250 (diff)
downloadcpython-d06d5403de5409be3db7c8218ecd8400cd94f40d.zip
cpython-d06d5403de5409be3db7c8218ecd8400cd94f40d.tar.gz
cpython-d06d5403de5409be3db7c8218ecd8400cd94f40d.tar.bz2
Closes #16366: Improve diagnostics from handleError(). Thanks to Antoine Pitrou for the suggestion.
Diffstat (limited to 'Lib/logging')
-rw-r--r--Lib/logging/__init__.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 0f804ae..9242023 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -879,16 +879,27 @@ class Handler(Filterer):
The record which was being processed is passed in to this method.
"""
if raiseExceptions and sys.stderr: # see issue 13807
- ei = sys.exc_info()
+ t, v, tb = sys.exc_info()
try:
- traceback.print_exception(ei[0], ei[1], ei[2],
- None, sys.stderr)
- sys.stderr.write('Logged from file %s, line %s\n' % (
- record.filename, record.lineno))
+ sys.stderr.write('--- Logging error ---\n')
+ traceback.print_exception(t, v, tb, None, sys.stderr)
+ sys.stderr.write('Call stack:\n')
+ # Walk the stack frame up until we're out of logging,
+ # so as to print the calling context.
+ frame = tb.tb_frame
+ while (frame and os.path.dirname(frame.f_code.co_filename) ==
+ __path__[0]):
+ frame = frame.f_back
+ if frame:
+ traceback.print_stack(frame, file=sys.stderr)
+ else:
+ # couldn't find the right stack frame, for some reason
+ sys.stderr.write('Logged from file %s, line %s\n' % (
+ record.filename, record.lineno))
except IOError: #pragma: no cover
pass # see issue 5971
finally:
- del ei
+ del t, v, tb
class StreamHandler(Handler):
"""