diff --git a/src/borg/logger.py b/src/borg/logger.py index d5f7f81c7..a3049ea92 100644 --- a/src/borg/logger.py +++ b/src/borg/logger.py @@ -106,10 +106,17 @@ def _log_warning(message, category, filename, lineno, file=None, line=None): def remove_handlers(logger): for handler in logger.handlers[:]: + handler.flush() handler.close() logger.removeHandler(handler) +def teardown_logging(): + global configured + logging.shutdown() + configured = False + + def setup_logging(stream=None, conf_fname=None, env_var="BORG_LOGGING_CONF", level="info", is_serve=False, json=False): """setup logging module according to the arguments provided diff --git a/src/borg/testsuite/archiver/__init__.py b/src/borg/testsuite/archiver/__init__.py index cdbc12193..56b66a439 100644 --- a/src/borg/testsuite/archiver/__init__.py +++ b/src/borg/testsuite/archiver/__init__.py @@ -21,6 +21,7 @@ from ...constants import * # NOQA from ...helpers import Location from ...helpers import EXIT_SUCCESS from ...helpers import bin_to_hex +from ...logger import teardown_logging from ...manifest import Manifest from ...remote import RemoteRepository from ...repository import Repository @@ -81,7 +82,10 @@ def exec_cmd(*args, archiver=None, fork=False, exe=None, input=b"", binary_outpu except SystemExit as e: output_text.flush() return e.code, output.getvalue() if binary_output else output.getvalue().decode() - ret = archiver.run(args) + try: + ret = archiver.run(args) + finally: + teardown_logging() # usually done via atexit, but we do not exit here output_text.flush() return ret, output.getvalue() if binary_output else output.getvalue().decode() finally: