From 876ee78285cb55c6dcc149147537f8ceecbe7a6d Mon Sep 17 00:00:00 2001 From: Ryan Echols Date: Thu, 17 Nov 2022 10:45:13 -0700 Subject: [PATCH 1/3] fix: try 2 - prevent logging config clobbering Previous behavior: loading this repository with `torch.hub.load` clobbers the existing logging configuration by modifying the root logger's configuration. New behavior: loading this repository with `torch.hub.load` only clobbers the logging configuration for logger `yolov5` and its descendants. This is done in a way compatible with Google Colab Signed-off-by: Ryan Echols --- utils/general.py | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/utils/general.py b/utils/general.py index 0c3b44d7f9b0..2d6f94e1bccc 100644 --- a/utils/general.py +++ b/utils/general.py @@ -7,6 +7,7 @@ import glob import inspect import logging +import logging.config import math import os import platform @@ -111,23 +112,40 @@ def is_writeable(dir, test=False): return False -def set_logging(name=None, verbose=VERBOSE): - # Sets level and returns logger - if is_kaggle() or is_colab(): - for h in logging.root.handlers: - logging.root.removeHandler(h) # remove all handlers associated with the root logger object - rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings - level = logging.INFO if verbose and rank in {-1, 0} else logging.ERROR - log = logging.getLogger(name) - log.setLevel(level) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter("%(message)s")) - handler.setLevel(level) - log.addHandler(handler) +LOGGING_NAME = "yolov5" -set_logging() # run before defining LOGGER -LOGGER = logging.getLogger("yolov5") # define globally (used in train.py, val.py, detect.py, etc.) +def set_logging(name=LOGGING_NAME, verbose=True): + # sets up logging for + rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings + level = logging.INFO if verbose and rank in {-1, 0} else logging.ERROR + logging.config.dictConfig({ + "version": 1, + "disable_existing_loggers": False, + "formatters": { + name: { + "format": "%(message)s" + } + }, + "handlers": { + name: { + "class": "logging.StreamHandler", + "formatter": name, + "level": level, + } + }, + "loggers": { + name: { + "level": level, + "handlers": [name], + "propagate": False, + } + } + }) + + +set_logging(LOGGING_NAME) # run before defining LOGGER +LOGGER = logging.getLogger(LOGGING_NAME) # define globally (used in train.py, val.py, detect.py, etc.) if platform.system() == 'Windows': for fn in LOGGER.info, LOGGER.warning: setattr(LOGGER, fn.__name__, lambda x: fn(emojis(x))) # emoji safe logging From a75b8b623c11fc325512a498a8ef89b0ece43a13 Mon Sep 17 00:00:00 2001 From: Ryan Echols Date: Thu, 17 Nov 2022 11:10:04 -0700 Subject: [PATCH 2/3] chore: fill in comment no-op so a pre-commit hook can auto-format files Signed-off-by: Ryan Echols --- utils/general.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/general.py b/utils/general.py index 2d6f94e1bccc..ccc64b5156e4 100644 --- a/utils/general.py +++ b/utils/general.py @@ -116,7 +116,7 @@ def is_writeable(dir, test=False): def set_logging(name=LOGGING_NAME, verbose=True): - # sets up logging for + # sets up logging for the given name rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings level = logging.INFO if verbose and rank in {-1, 0} else logging.ERROR logging.config.dictConfig({ From 7ded3fbb6529793d80d1e4053f72747b9690717c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 17 Nov 2022 18:10:26 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- utils/general.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/utils/general.py b/utils/general.py index ccc64b5156e4..28d4ffbefcee 100644 --- a/utils/general.py +++ b/utils/general.py @@ -124,24 +124,17 @@ def set_logging(name=LOGGING_NAME, verbose=True): "disable_existing_loggers": False, "formatters": { name: { - "format": "%(message)s" - } - }, + "format": "%(message)s"}}, "handlers": { name: { "class": "logging.StreamHandler", "formatter": name, - "level": level, - } - }, + "level": level,}}, "loggers": { name: { "level": level, "handlers": [name], - "propagate": False, - } - } - }) + "propagate": False,}}}) set_logging(LOGGING_NAME) # run before defining LOGGER