diff --git a/hived/log.py b/hived/log.py index d9d96f3..3ba7c61 100644 --- a/hived/log.py +++ b/hived/log.py @@ -1,5 +1,5 @@ import logging - +from traceback import format_exception import simplejson as json from hived import trail @@ -27,4 +27,15 @@ def format(self, record): if trail.get_id(): record_dict['_trail_id'] = trail.get_id() + if record.exc_info: + etype, exc, tb = record.exc_info + record_dict['error'] = { + 'etype': etype.__name__, + 'exc': exc, + 'locals': {k: repr(v) + for k, v in tb.tb_frame.f_locals.iteritems() + if not k.startswith('__')}, + 'traceback': format_exception(etype, exc, tb), + } + return json.dumps(record_dict, default=json_handler)