From a094441a231ae96c7b86fd344f52c3167bf504b8 Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:17:09 +0800 Subject: [PATCH 1/5] fix modelzoo#658, part of #7513 Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- monai/apps/utils.py | 27 +++++++++++++++++---------- monai/bundle/scripts.py | 3 +-- monai/bundle/workflows.py | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/monai/apps/utils.py b/monai/apps/utils.py index 0c998146a3..e4fec7d190 100644 --- a/monai/apps/utils.py +++ b/monai/apps/utils.py @@ -54,20 +54,27 @@ def get_logger( """ Get a `module_name` logger with the specified format and date format. By default, the logger will print to `stdout` at the INFO level. - If `module_name` is `None`, return the root logger. - `fmt` and `datafmt` are passed to a `logging.Formatter` object + - If `module_name` is None, the root logger is returned. + - `fmt` and `datefmt` are passed to `logging.Formatter` for formatting. (https://docs.python.org/3/library/logging.html#formatter-objects). - `logger_handler` can be used to add an additional handler. + - If `logger_handler` is provided, it will be added to the logger. """ - adds_stdout_handler = module_name is not None and module_name not in logging.root.manager.loggerDict + # Retrieve or create a logger for the module logger = logging.getLogger(module_name) - logger.propagate = False logger.setLevel(logging.INFO) - if adds_stdout_handler: # don't add multiple stdout or add to the root - handler = logging.StreamHandler(sys.stdout) - formatter = logging.Formatter(fmt=fmt, datefmt=datefmt) - handler.setFormatter(formatter) - logger.addHandler(handler) + + # Check if stdout handler should be added (avoid adding multiple times) + if module_name and module_name not in logging.root.manager.loggerDict: + if fmt is not None or datefmt is not None: + stdout_handler = next( + (h for h in logging.root.handlers if isinstance(h, logging.StreamHandler)), None + ) + if stdout_handler: + # Set the formatter if StreamHandler exists + formatter = logging.Formatter(fmt=fmt, datefmt=datefmt) + stdout_handler.setFormatter(formatter) + + # Add custom handler if provided if logger_handler is not None: logger.addHandler(logger_handler) return logger diff --git a/monai/bundle/scripts.py b/monai/bundle/scripts.py index 4251da0b6f..884723ed68 100644 --- a/monai/bundle/scripts.py +++ b/monai/bundle/scripts.py @@ -1945,7 +1945,6 @@ def create_workflow( """ _args = update_kwargs(args=args_file, workflow_name=workflow_name, config_file=config_file, **kwargs) - _log_input_summary(tag="run", args=_args) (workflow_name, config_file) = _pop_args( _args, workflow_name=ConfigWorkflow, config_file=None ) # the default workflow name is "ConfigWorkflow" @@ -1969,7 +1968,7 @@ def create_workflow( workflow_ = workflow_class(**_args) workflow_.initialize() - + _log_input_summary(tag="run", args=_args) return workflow_ diff --git a/monai/bundle/workflows.py b/monai/bundle/workflows.py index d728d7d930..ccdb08e208 100644 --- a/monai/bundle/workflows.py +++ b/monai/bundle/workflows.py @@ -316,8 +316,8 @@ def __init__( else: raise FileNotFoundError(f"Cannot find the logging config file: {logging_file}.") else: - logger.info(f"Setting logging properties based on config: {logging_file}.") fileConfig(str(logging_file), disable_existing_loggers=False) + logger.info(f"Setting logging properties based on config: {logging_file}.") self.parser = ConfigParser() self.parser.read_config(f=config_file) From a59603fe4fb19934647d85b7f9e3bf1767c3ce28 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:20:14 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- monai/apps/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/monai/apps/utils.py b/monai/apps/utils.py index e4fec7d190..8ac15f4aa3 100644 --- a/monai/apps/utils.py +++ b/monai/apps/utils.py @@ -62,7 +62,7 @@ def get_logger( # Retrieve or create a logger for the module logger = logging.getLogger(module_name) logger.setLevel(logging.INFO) - + # Check if stdout handler should be added (avoid adding multiple times) if module_name and module_name not in logging.root.manager.loggerDict: if fmt is not None or datefmt is not None: @@ -73,7 +73,7 @@ def get_logger( # Set the formatter if StreamHandler exists formatter = logging.Formatter(fmt=fmt, datefmt=datefmt) stdout_handler.setFormatter(formatter) - + # Add custom handler if provided if logger_handler is not None: logger.addHandler(logger_handler) From cbfe9004b0c05d2069d0239f8a188848a8006b9d Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:39:34 +0800 Subject: [PATCH 3/5] fix format Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- monai/apps/utils.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/monai/apps/utils.py b/monai/apps/utils.py index e4fec7d190..8056ea7bea 100644 --- a/monai/apps/utils.py +++ b/monai/apps/utils.py @@ -62,18 +62,16 @@ def get_logger( # Retrieve or create a logger for the module logger = logging.getLogger(module_name) logger.setLevel(logging.INFO) - + # Check if stdout handler should be added (avoid adding multiple times) if module_name and module_name not in logging.root.manager.loggerDict: if fmt is not None or datefmt is not None: - stdout_handler = next( - (h for h in logging.root.handlers if isinstance(h, logging.StreamHandler)), None - ) + stdout_handler = next((h for h in logging.root.handlers if isinstance(h, logging.StreamHandler)), None) if stdout_handler: # Set the formatter if StreamHandler exists formatter = logging.Formatter(fmt=fmt, datefmt=datefmt) stdout_handler.setFormatter(formatter) - + # Add custom handler if provided if logger_handler is not None: logger.addHandler(logger_handler) From 660d19f582320ba84bd49b316c88c4955039e8eb Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Wed, 23 Oct 2024 15:09:15 +0800 Subject: [PATCH 4/5] update Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- monai/apps/utils.py | 27 +++++++++++---------------- monai/handlers/stats_handler.py | 2 +- monai/networks/trt_compiler.py | 6 +++--- monai/utils/misc.py | 2 +- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/monai/apps/utils.py b/monai/apps/utils.py index 8056ea7bea..650633ae42 100644 --- a/monai/apps/utils.py +++ b/monai/apps/utils.py @@ -28,7 +28,7 @@ from urllib.request import urlopen, urlretrieve from monai.config.type_definitions import PathLike -from monai.utils import look_up_option, min_version, optional_import +from monai.utils import first, look_up_option, min_version, optional_import gdown, has_gdown = optional_import("gdown", "4.7.3") @@ -54,25 +54,20 @@ def get_logger( """ Get a `module_name` logger with the specified format and date format. By default, the logger will print to `stdout` at the INFO level. - - If `module_name` is None, the root logger is returned. - - `fmt` and `datefmt` are passed to `logging.Formatter` for formatting. + If `module_name` is `None`, return the root logger. + `fmt` and `datafmt` are passed to a `logging.Formatter` object (https://docs.python.org/3/library/logging.html#formatter-objects). - - If `logger_handler` is provided, it will be added to the logger. + `logger_handler` can be used to add an additional handler. """ - # Retrieve or create a logger for the module + adds_stdout_handler = module_name is not None and module_name not in logging.root.manager.loggerDict logger = logging.getLogger(module_name) + logger.propagate = False logger.setLevel(logging.INFO) - - # Check if stdout handler should be added (avoid adding multiple times) - if module_name and module_name not in logging.root.manager.loggerDict: - if fmt is not None or datefmt is not None: - stdout_handler = next((h for h in logging.root.handlers if isinstance(h, logging.StreamHandler)), None) - if stdout_handler: - # Set the formatter if StreamHandler exists - formatter = logging.Formatter(fmt=fmt, datefmt=datefmt) - stdout_handler.setFormatter(formatter) - - # Add custom handler if provided + if adds_stdout_handler: # don't add multiple stdout or add to the root + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter(fmt=fmt, datefmt=datefmt) + handler.setFormatter(formatter) + logger.addHandler(handler) if logger_handler is not None: logger.addHandler(logger_handler) return logger diff --git a/monai/handlers/stats_handler.py b/monai/handlers/stats_handler.py index ab36d19bd1..c4971e9cac 100644 --- a/monai/handlers/stats_handler.py +++ b/monai/handlers/stats_handler.py @@ -74,7 +74,7 @@ def __init__( output_transform: Callable = lambda x: x[0], global_epoch_transform: Callable = lambda x: x, state_attributes: Sequence[str] | None = None, - name: str | None = "StatsHandler", + name: str | None = "monai.handlers.StatsHandler", tag_name: str = DEFAULT_TAG, key_var_format: str = DEFAULT_KEY_VAL_FORMAT, ) -> None: diff --git a/monai/networks/trt_compiler.py b/monai/networks/trt_compiler.py index 00d2eb61af..a360f63dbd 100644 --- a/monai/networks/trt_compiler.py +++ b/monai/networks/trt_compiler.py @@ -115,7 +115,7 @@ def __init__(self, plan_path, logger=None): logger: optional logger object """ self.plan_path = plan_path - self.logger = logger or get_logger("trt_compile") + self.logger = logger or get_logger("monai.networks.trt_compiler") self.logger.info(f"Loading TensorRT engine: {self.plan_path}") self.engine = engine_from_bytes(bytes_from_path(self.plan_path)) self.tensors = OrderedDict() @@ -288,7 +288,7 @@ def __init__( self.fallback = fallback self.disabled = False - self.logger = logger or get_logger("trt_compile") + self.logger = logger or get_logger("monai.networks.trt_compiler") # Normally we read input_names from forward() but can be overridden if input_names is None: @@ -563,7 +563,7 @@ def find_sub(parent, submodule): else: wrap(model, base_path) else: - logger = logger or get_logger("trt_compile") + logger = logger or get_logger("monai.networks.trt_compiler") logger.warning("TensorRT and/or polygraphy packages are not available! trt_compile() has no effect.") return model diff --git a/monai/utils/misc.py b/monai/utils/misc.py index 6386aae713..ec9b1256a2 100644 --- a/monai/utils/misc.py +++ b/monai/utils/misc.py @@ -887,7 +887,7 @@ def run_cmd(cmd_list: list[str], **kwargs: Any) -> subprocess.CompletedProcess: if kwargs.pop("run_cmd_verbose", False): import monai - monai.apps.utils.get_logger("run_cmd").info(f"{cmd_list}") # type: ignore[attr-defined] + monai.apps.utils.get_logger("monai.utils.run_cmd").info(f"{cmd_list}") # type: ignore[attr-defined] try: return subprocess.run(cmd_list, **kwargs) except subprocess.CalledProcessError as e: From b7b5db43e82fce45c174349676fb0f2e384522f9 Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Wed, 23 Oct 2024 15:10:05 +0800 Subject: [PATCH 5/5] update Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- monai/apps/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monai/apps/utils.py b/monai/apps/utils.py index 650633ae42..0c998146a3 100644 --- a/monai/apps/utils.py +++ b/monai/apps/utils.py @@ -28,7 +28,7 @@ from urllib.request import urlopen, urlretrieve from monai.config.type_definitions import PathLike -from monai.utils import first, look_up_option, min_version, optional_import +from monai.utils import look_up_option, min_version, optional_import gdown, has_gdown = optional_import("gdown", "4.7.3")