aboutsummaryrefslogtreecommitdiff
path: root/test/functional
diff options
context:
space:
mode:
authorJamesC <james.chiangwu@gmail.com>2019-10-28 14:50:01 +0100
committerJames Chiang <james.chiangwu@gmail.com>2019-11-03 20:34:18 +0100
commit6f40820757d25ff1ccfdfcbdf2b45b8b65308010 (patch)
tree4b93be0b1516edf56fa74591823a030ab388a045 /test/functional
parent6b71241291a184c9ee197bf5f0c7e1414417a0a0 (diff)
downloadbitcoin-6f40820757d25ff1ccfdfcbdf2b45b8b65308010.tar.xz
Add closing and flushing of logging handlers
In order for BitcoinTestFramework to correctly restart after shutdown, the previous logging handlers need to be removed, or else logging will continue in the previous temp directory. "Flush" ensures buffers are emptied, and "close" ensures file handler close logging file.
Diffstat (limited to 'test/functional')
-rwxr-xr-xtest/functional/test_framework/test_framework.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py
index df12a696d4..03cd127a7d 100755
--- a/test/functional/test_framework/test_framework.py
+++ b/test/functional/test_framework/test_framework.py
@@ -266,7 +266,18 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
self.log.error("Test failed. Test logging available at %s/test_framework.log", self.options.tmpdir)
self.log.error("Hint: Call {} '{}' to consolidate all logs".format(os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../combine_logs.py"), self.options.tmpdir))
exit_code = TEST_EXIT_FAILED
- logging.shutdown()
+ # Logging.shutdown will not remove stream- and filehandlers, so we must
+ # do it explicitly. Handlers are removed so the next test run can apply
+ # different log handler settings.
+ # See: https://docs.python.org/3/library/logging.html#logging.shutdown
+ for h in list(self.log.handlers):
+ h.flush()
+ h.close()
+ self.log.removeHandler(h)
+ rpc_logger = logging.getLogger("BitcoinRPC")
+ for h in list(rpc_logger.handlers):
+ h.flush()
+ rpc_logger.removeHandler(h)
if cleanup_tree_on_exit:
shutil.rmtree(self.options.tmpdir)
return exit_code