diff --git a/ch_tools/chadmin/cli/chadmin_group.py b/ch_tools/chadmin/cli/chadmin_group.py index c0c92451..8823f318 100644 --- a/ch_tools/chadmin/cli/chadmin_group.py +++ b/ch_tools/chadmin/cli/chadmin_group.py @@ -50,8 +50,10 @@ def wrapper(ctx, *a, **kw): try: cmd_callback(*a, **kw) logging.debug("Command '{}' completed", cmd.name) - except Exception: + except Exception as e: + logging.disable_stdout_logger() logging.exception("Command '{}' failed with error:", cmd.name) + logging.print_last_exception(e) cmd.callback = wrapper super().add_command( diff --git a/ch_tools/common/logging.py b/ch_tools/common/logging.py index a1e647a1..2125aa08 100644 --- a/ch_tools/common/logging.py +++ b/ch_tools/common/logging.py @@ -14,6 +14,7 @@ WARN, WARNING, ) +import traceback from typing import Any, Dict, Optional from loguru import logger @@ -96,6 +97,7 @@ def configure( "format": format_, "enqueue": True, "diagnose": False, + "backtrace": False, } if "level" in value: handler["level"] = value["level"] @@ -230,4 +232,10 @@ def enable_stdout_logger(): level="INFO", format="{message}", filter=make_filter(logger_config["module"]), + backtrace=False, + diagnose=False, ) + + +def print_last_exception(e): + traceback.print_exception(BaseException, e, e.__traceback__, chain=False)