From b8e64dc526c125027c74c9273fc361f44bc74ac5 Mon Sep 17 00:00:00 2001 From: zhupr Date: Wed, 12 May 2021 17:58:39 +0800 Subject: [PATCH 1/2] Modify set_global_logger_level use of contextmanager --- qlib/log.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/qlib/log.py b/qlib/log.py index a0e4f7986..26b62e3e8 100644 --- a/qlib/log.py +++ b/qlib/log.py @@ -165,8 +165,16 @@ class LogFilter(logging.Filter): return allow +@contextmanager def set_global_logger_level(level: int): + _handler_level_map = {} qlib_logger = logging.root.manager.loggerDict.get("qlib", None) if qlib_logger is not None: for _handler in qlib_logger.handlers: + _handler_level_map[_handler] = _handler.level _handler.level = level + try: + yield + finally: + for _handler, _level in _handler_level_map.items(): + _handler.level = _level From 76c5c5d1b6c4a7c6823f52eee85bcc4a4a582bf7 Mon Sep 17 00:00:00 2001 From: zhupr Date: Wed, 12 May 2021 20:37:47 +0800 Subject: [PATCH 2/2] Add docstrings to set_global_logger_level --- qlib/log.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/qlib/log.py b/qlib/log.py index 26b62e3e8..379544392 100644 --- a/qlib/log.py +++ b/qlib/log.py @@ -165,14 +165,79 @@ class LogFilter(logging.Filter): return allow -@contextmanager -def set_global_logger_level(level: int): +def set_global_logger_level(level: int, return_orig_handler_level: bool = False): + """set qlib.xxx logger handlers level + + Parameters + ---------- + level: int + logger level + + return_orig_handler_level: bool + return origin handler level map + + Examples + --------- + + .. code-block:: python + + import qlib + import logging + from qlib.log import get_module_logger, set_global_logger_level + qlib.init() + + tmp_logger_01 = get_module_logger("tmp_logger_01", level=logging.INFO) + tmp_logger_01.info("1. tmp_logger_01 info show") + + global_level = logging.WARNING + 1 + set_global_logger_level(global_level) + tmp_logger_02 = get_module_logger("tmp_logger_02", level=logging.INFO) + tmp_logger_02.log(msg="2. tmp_logger_02 log show", level=global_level) + + tmp_logger_01.info("3. tmp_logger_01 info do not show") + + """ _handler_level_map = {} qlib_logger = logging.root.manager.loggerDict.get("qlib", None) if qlib_logger is not None: for _handler in qlib_logger.handlers: _handler_level_map[_handler] = _handler.level _handler.level = level + return _handler_level_map if return_orig_handler_level else None + + +@contextmanager +def set_global_logger_level_cm(level: int): + """set qlib.xxx logger handlers level to use contextmanager + + Parameters + ---------- + level: int + logger level + + Examples + --------- + + .. code-block:: python + + import qlib + import logging + from qlib.log import get_module_logger, set_global_logger_level_cm + qlib.init() + + tmp_logger_01 = get_module_logger("tmp_logger_01", level=logging.INFO) + tmp_logger_01.info("1. tmp_logger_01 info show") + + global_level = logging.WARNING + 1 + with set_global_logger_level_cm(global_level): + tmp_logger_02 = get_module_logger("tmp_logger_02", level=logging.INFO) + tmp_logger_02.log(msg="2. tmp_logger_02 log show", level=global_level) + tmp_logger_01.info("3. tmp_logger_01 info do not show") + + tmp_logger_01.info("4. tmp_logger_01 info show") + + """ + _handler_level_map = set_global_logger_level(level, return_orig_handler_level=True) try: yield finally: