Fix: try 2 - prevent logging config clobbering (#10192)
* 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 <ryan@shadylakemedia.com> * chore: fill in comment no-op so a pre-commit hook can auto-format files Signed-off-by: Ryan Echols <ryan@shadylakemedia.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Signed-off-by: Ryan Echols <ryan@shadylakemedia.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>pull/10205/head
parent
1510111b46
commit
ff6e6e328e
|
@ -7,6 +7,7 @@ import contextlib
|
||||||
import glob
|
import glob
|
||||||
import inspect
|
import inspect
|
||||||
import logging
|
import logging
|
||||||
|
import logging.config
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
|
@ -111,23 +112,33 @@ def is_writeable(dir, test=False):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def set_logging(name=None, verbose=VERBOSE):
|
LOGGING_NAME = "yolov5"
|
||||||
# Sets level and returns logger
|
|
||||||
if is_kaggle() or is_colab():
|
|
||||||
for h in logging.root.handlers:
|
def set_logging(name=LOGGING_NAME, verbose=True):
|
||||||
logging.root.removeHandler(h) # remove all handlers associated with the root logger object
|
# sets up logging for the given name
|
||||||
rank = int(os.getenv('RANK', -1)) # rank in world for Multi-GPU trainings
|
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
|
level = logging.INFO if verbose and rank in {-1, 0} else logging.ERROR
|
||||||
log = logging.getLogger(name)
|
logging.config.dictConfig({
|
||||||
log.setLevel(level)
|
"version": 1,
|
||||||
handler = logging.StreamHandler()
|
"disable_existing_loggers": False,
|
||||||
handler.setFormatter(logging.Formatter("%(message)s"))
|
"formatters": {
|
||||||
handler.setLevel(level)
|
name: {
|
||||||
log.addHandler(handler)
|
"format": "%(message)s"}},
|
||||||
|
"handlers": {
|
||||||
|
name: {
|
||||||
|
"class": "logging.StreamHandler",
|
||||||
|
"formatter": name,
|
||||||
|
"level": level,}},
|
||||||
|
"loggers": {
|
||||||
|
name: {
|
||||||
|
"level": level,
|
||||||
|
"handlers": [name],
|
||||||
|
"propagate": False,}}})
|
||||||
|
|
||||||
|
|
||||||
set_logging() # run before defining LOGGER
|
set_logging(LOGGING_NAME) # run before defining LOGGER
|
||||||
LOGGER = logging.getLogger("yolov5") # define globally (used in train.py, val.py, detect.py, etc.)
|
LOGGER = logging.getLogger(LOGGING_NAME) # define globally (used in train.py, val.py, detect.py, etc.)
|
||||||
if platform.system() == 'Windows':
|
if platform.system() == 'Windows':
|
||||||
for fn in LOGGER.info, LOGGER.warning:
|
for fn in LOGGER.info, LOGGER.warning:
|
||||||
setattr(LOGGER, fn.__name__, lambda x: fn(emojis(x))) # emoji safe logging
|
setattr(LOGGER, fn.__name__, lambda x: fn(emojis(x))) # emoji safe logging
|
||||||
|
|
Loading…
Reference in New Issue