diff options
-rw-r--r-- | lib/bb/cooker.py | 10 | ||||
-rw-r--r-- | lib/bb/event.py | 6 | ||||
-rw-r--r-- | lib/bb/msg.py | 10 |
3 files changed, 16 insertions, 10 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index 5d2f2a88e..e0e8bf55a 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -1125,7 +1125,7 @@ class CookerParser(object): return False except ParsingFailure as exc: self.shutdown(clean=False) - bb.fatal('Error parsing %s: %s' % + bb.fatal('Unable to parse %s: %s' % (exc.recipe, bb.exceptions.to_string(exc.realexception))) except bb.parse.ParseError as exc: bb.fatal(str(exc)) @@ -1133,13 +1133,11 @@ class CookerParser(object): logger.error('Unable to parse %s', exc.recipe) sys.exit(1) except Exception as exc: - import traceback etype, value, tb = sys.exc_info() - formatted = bb.exceptions.format_extracted(value.traceback, limit=5) - formatted.extend(traceback.format_exception_only(etype, value)) - + logger.error('Unable to parse %s', value.recipe, + exc_info=(etype, value, exc.traceback)) self.shutdown(clean=False) - bb.fatal('Error parsing %s:\n%s' % (value.recipe, ''.join(formatted))) + sys.exit(1) self.current += 1 self.virtuals += len(result) diff --git a/lib/bb/event.py b/lib/bb/event.py index daca0a770..16d936c1b 100644 --- a/lib/bb/event.py +++ b/lib/bb/event.py @@ -422,8 +422,10 @@ class LogHandler(logging.Handler): def emit(self, record): if record.exc_info: - lines = traceback.format_exception(*record.exc_info, limit=5) - record.msg += '\n%s' % ''.join(lines) + etype, value, tb = record.exc_info + if hasattr(tb, 'tb_next'): + tb = list(bb.exceptions.extract_traceback(tb, context=3)) + record.bb_exc_info = (etype, value, tb) record.exc_info = None fire(record, None) diff --git a/lib/bb/msg.py b/lib/bb/msg.py index a7ac85079..12d19ff8e 100644 --- a/lib/bb/msg.py +++ b/lib/bb/msg.py @@ -65,9 +65,15 @@ class BBLogFormatter(logging.Formatter): def format(self, record): record.levelname = self.getLevelName(record.levelno) if record.levelno == self.PLAIN: - return record.getMessage() + msg = record.getMessage() else: - return logging.Formatter.format(self, record) + msg = logging.Formatter.format(self, record) + + if hasattr(record, 'bb_exc_info'): + etype, value, tb = record.bb_exc_info + formatted = bb.exceptions.format_exception(etype, value, tb, limit=5) + msg += '\n' + ''.join(formatted) + return msg class Loggers(dict): def __getitem__(self, key): |