diff --git a/dvc/logger.py b/dvc/logger.py index e9b8f9c6af..3afb0f647b 100644 --- a/dvc/logger.py +++ b/dvc/logger.py @@ -1,6 +1,6 @@ """Manages logging configuration for dvc repo.""" -import io +import traceback import logging.config import logging.handlers @@ -101,26 +101,15 @@ def _description(self, message, exception): return description.format(message=message, exception=exception) def _walk_exc(self, exc_info): - import traceback - - buffer = io.StringIO() - - traceback.print_exception(*exc_info, file=buffer) - exc = exc_info[1] - tb = buffer.getvalue() exc_list = [str(exc)] - tb_list = [tb] - # NOTE: parsing chained exceptions. See dvc/exceptions.py for more info while hasattr(exc, "__cause__") and exc.__cause__: exc_list.append(str(exc.__cause__)) - if hasattr(exc, "cause_tb") and exc.cause_tb: - tb_list.insert(0, str(exc.cause_tb)) exc = exc.__cause__ - return exc_list, tb_list + return exc_list def _parse_exc(self, record): tb_only = getattr(record, "tb_only", False) @@ -128,7 +117,8 @@ def _parse_exc(self, record): if not record.exc_info: return (None, "") - exc_list, tb_list = self._walk_exc(record.exc_info) + exc_list = self._walk_exc(record.exc_info) + tb = traceback.format_exception(*record.exc_info) exception = None if tb_only else ": ".join(exc_list) @@ -139,7 +129,7 @@ def _parse_exc(self, record): red=colorama.Fore.RED, nc=colorama.Fore.RESET, line="-" * 60, - stack_trace="\n".join(tb_list), + stack_trace="".join(tb), ) else: stack_trace = ""