Errors and Exceptions¶
Exceptions and Tracebacks¶
If you are using actions you don’t need to do anything special to log exceptions: if an exception is thrown within the context of an action and not caught, the action will be marked as failed and the exception will be logged with it.
If you get a completely unexpected exception you may wish to log a traceback to aid debugging:
from eliot import write_traceback
class YourClass(object):
def run(self):
try:
dosomething()
except:
write_traceback()
Custom Exception Logging¶
By default both failed actions and tracebacks log the class and string-representation of the logged exception. You can add additional fields to these messages by registering a callable that converts exceptions into fields. If no extraction function is registered for a class Eliot will look for registered functions for the exception’s base classes.
For example, the following registration means all failed actions that fail with a MyException
will have a code
field in the action end message, as will tracebacks logged with this exception:
class MyException(Exception):
def __init__(self, code):
self.code = code
from eliot import register_exception_extractor
register_exception_extractor(MyException, lambda e: {"code": e.code})
By default Eliot will automatically extract fields from OSError
, IOError
and other subclasses of Python’s EnvironmentError
.