in src/utils.py [0:0]
def create_output_dir(opt, path: Path):
if hasattr(opt, 'rank'):
filepath = path / f'main_{opt.rank}.log'
else:
filepath = path / 'main.log'
if not path.exists():
path.mkdir(parents=True, exist_ok=True)
if hasattr(opt, 'rank') and opt.rank != 0:
sys.stdout = open(path / f'stdout_{opt.rank}.log', 'w')
sys.stderr = open(path / f'stderr_{opt.rank}.log', 'w')
# Safety check
if filepath.exists() and not opt.checkpoint:
logging.warning("Experiment already exists!")
# Create log formatter
log_formatter = LogFormatter()
# Create logger and set level to debug
logger = logging.getLogger()
logger.handlers = []
logger.setLevel(logging.DEBUG)
logger.propagate = False
# create file handler and set level to debug
file_handler = logging.FileHandler(filepath, "a")
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(log_formatter)
logger.addHandler(file_handler)
# create console handler and set level to info
if hasattr(opt, 'rank') and opt.rank == 0:
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(log_formatter)
logger.addHandler(console_handler)
# reset logger elapsed time
def reset_time():
log_formatter.start_time = time.time()
logger.reset_time = reset_time
logger.info(opt)
return logger