import logging import sys import os # setup root logger def setup_root_logger(log_level=logging.INFO, dist_rank=0, local_dir=''): """ log_level: logging level dist_rank: process rank for distributed training local_dir: local log path, default None """ logger = logging.getLogger() # setup root logger for all for handler in logger.handlers: logger.removeHandler(handler) # create formatter fmt = '[%(asctime)s] (%(filename)s %(lineno)d): %(levelname)s %(message)s' #color_fmt = colored('[%(asctime)s]', 'green') + \ # colored('(%(filename)s %(lineno)d)', 'yellow') + ': %(levelname)s %(message)s' # create console handlers for master process if dist_rank == 0: console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter( logging.Formatter(fmt=fmt, datefmt='%Y-%m-%d %H:%M:%S')) logger.addHandler(console_handler) # create file handlers if local_dir: os.makedirs(local_dir, exist_ok=True) file_handler = logging.FileHandler(os.path.join(local_dir, f'log_rank{dist_rank}.log'), mode='a') file_handler.setFormatter(logging.Formatter(fmt=fmt, datefmt='%Y-%m-%d %H:%M:%S')) logger.addHandler(file_handler) logger.setLevel(log_level)