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))
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)
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)
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):