1 """Global logger for using in test and tincd scripts."""
7 from types import TracebackType
9 from .path import TEST_WD, TEST_NAME
11 logging.basicConfig(level=logging.DEBUG)
13 _fmt = logging.Formatter(
14 "%(asctime)s %(name)s %(filename)s:%(lineno)d %(levelname)s %(message)s"
17 # Where to put log files for this test and nodes started by it
18 _log_dir = os.path.join(TEST_WD, "logs")
21 def new_logger(name: str) -> logging.Logger:
22 """Create a new named logger with common logging format.
23 Log entries will go into a separate logfile named 'name.log'.
25 os.makedirs(_log_dir, exist_ok=True)
27 logger = logging.getLogger(name)
28 logger.setLevel(logging.DEBUG)
30 file = logging.FileHandler(os.path.join(_log_dir, name + ".log"))
31 file.setFormatter(_fmt)
32 logger.addHandler(file)
37 # Main logger used by most tests
38 log = new_logger(TEST_NAME)
42 ex_type: T.Type[BaseException],
44 tb_type: T.Optional[TracebackType],
46 """Logging handler for uncaught exceptions."""
47 log.error("Uncaught exception", exc_info=(ex_type, base, tb_type))
50 sys.excepthook = _exc_hook