How do you cause uncaught exceptions to output via the logging
module rather than to stderr
?
I realize the best way to do this would be:
try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e)
But my situation is such that it would be really nice if logging.exception(...)
were invoked automatically whenever an exception isn’t caught.
Advertisement
Answer
As Ned pointed out, sys.excepthook
is invoked every time an exception is raised and uncaught. The practical implication of this is that in your code you can override the default behavior of sys.excepthook
to do whatever you want (including using logging.exception
).
As a straw man example:
import sys def foo(exctype, value, tb): print('My Error Information') print('Type:', exctype) print('Value:', value) print('Traceback:', tb)
Override sys.excepthook
:
>>> sys.excepthook = foo
Commit obvious syntax error (leave out the colon) and get back custom error information:
>>> def bar(a, b) My Error Information Type: <type 'exceptions.SyntaxError'> Value: invalid syntax (<stdin>, line 1) Traceback: None
For more information about sys.excepthook
, read the docs.