Skip to content

Commit b203441

Browse files
committed
Run the root logger handler fix on uninitialised loggers only
Adds a more detailed explanation in comments
1 parent cc4fccf commit b203441

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

mmcv/utils/logging.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@ def get_logger(name, log_file=None, log_level=logging.INFO, file_mode='w'):
2828
logging.Logger: The expected logger.
2929
"""
3030
logger = logging.getLogger(name)
31-
32-
# set the root logger's StreamHandler, if any, to log at the ERROR level
33-
for handler in logger.root.handlers:
34-
if type(handler) is logging.StreamHandler:
35-
handler.setLevel(logging.ERROR)
36-
3731
if name in logger_initialized:
3832
return logger
3933
# handle hierarchical names
@@ -43,6 +37,17 @@ def get_logger(name, log_file=None, log_level=logging.INFO, file_mode='w'):
4337
if name.startswith(logger_name):
4438
return logger
4539

40+
# handle duplicate logs to the console
41+
# Starting in 1.8.0, PyTorch DDP attaches a StreamHandler <stderr> (NOTSET)
42+
# to the root logger. As logger.propagate is True by default, this root
43+
# level handler causes logging messages from rank>0 processes to
44+
# unexpectedly show up on the console, creating much unwanted clutter.
45+
# To fix this issue, we set the root logger's StreamHandler, if any, to log
46+
# at the ERROR level.
47+
for handler in logger.root.handlers:
48+
if type(handler) is logging.StreamHandler:
49+
handler.setLevel(logging.ERROR)
50+
4651
stream_handler = logging.StreamHandler()
4752
handlers = [stream_handler]
4853

0 commit comments

Comments
 (0)