From d9e55057661f31ebaa0c825719067e0344001e2d Mon Sep 17 00:00:00 2001 From: Max Strobel Date: Tue, 5 Apr 2022 17:38:13 +0200 Subject: [PATCH] fix: disable usage of root logger (#7296) * fix: disable usage of root logger `logging.basicConfig` configures Python's root logger. This prohibits fine control of logging, overwrites logging configuration done outside the package, and is not best practice. Instead, the used logger is now configured directly, and the root logger is untouched. Example: If yolov5 is used as part of another project with some sophisticated logging, the internal `logging.basicConfig` call overwrites all the external configuration. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update general.py * Update general.py * Comment kaggle * Uncomment kaggle Co-authored-by: Maximilian Strobel Co-authored-by: Glenn Jocher Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- data/Objects365.yaml | 4 ++-- utils/general.py | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/data/Objects365.yaml b/data/Objects365.yaml index 82b42a120d40..114bee2b159c 100644 --- a/data/Objects365.yaml +++ b/data/Objects365.yaml @@ -61,9 +61,9 @@ names: ['Person', 'Sneakers', 'Chair', 'Other Shoes', 'Hat', 'Car', 'Lamp', 'Gla # Download script/URL (optional) --------------------------------------------------------------------------------------- download: | from tqdm import tqdm - + from utils.general import Path, check_requirements, download, np, xyxy2xywhn - + check_requirements(('pycocotools>=2.0',)) from pycocotools.coco import COCO diff --git a/utils/general.py b/utils/general.py index 65dd9326797e..5316f504871a 100755 --- a/utils/general.py +++ b/utils/general.py @@ -82,11 +82,17 @@ def set_logging(name=None, verbose=VERBOSE): 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 - logging.basicConfig(format="%(message)s", level=logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING) - return logging.getLogger(name) + level = logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING + log = logging.getLogger(name) + log.setLevel(level) + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(message)s")) + handler.setLevel(level) + log.addHandler(handler) -LOGGER = set_logging('yolov5') # define globally (used in train.py, val.py, detect.py, etc.) +set_logging() # run before defining LOGGER +LOGGER = logging.getLogger("yolov5") # define globally (used in train.py, val.py, detect.py, etc.) def user_config_dir(dir='Ultralytics', env_var='YOLOV5_CONFIG_DIR'):