Spaces:
Runtime error
Runtime error
# python3.7 | |
"""Utility functions for logging.""" | |
import os | |
import sys | |
import logging | |
__all__ = ['setup_logger'] | |
def setup_logger(work_dir=None, logfile_name='log.txt', logger_name='logger'): | |
"""Sets up logger from target work directory. | |
The function will sets up a logger with `DEBUG` log level. Two handlers will | |
be added to the logger automatically. One is the `sys.stdout` stream, with | |
`INFO` log level, which will print improtant messages on the screen. The other | |
is used to save all messages to file `$WORK_DIR/$LOGFILE_NAME`. Messages will | |
be added time stamp and log level before logged. | |
NOTE: If `work_dir` or `logfile_name` is empty, the file stream will be | |
skipped. | |
Args: | |
work_dir: The work directory. All intermediate files will be saved here. | |
(default: None) | |
logfile_name: Name of the file to save log message. (default: `log.txt`) | |
logger_name: Unique name for the logger. (default: `logger`) | |
Returns: | |
A `logging.Logger` object. | |
Raises: | |
SystemExit: If the work directory has already existed, of the logger with | |
specified name `logger_name` has already existed. | |
""" | |
logger = logging.getLogger(logger_name) | |
# if logger.hasHandlers(): # Already existed | |
# raise SystemExit(f'Logger name `{logger_name}` has already been set up!\n' | |
# f'Please use another name, or otherwise the messages ' | |
# f'may be mixed between these two loggers.') | |
logger.setLevel(logging.DEBUG) | |
formatter = logging.Formatter("[%(asctime)s][%(levelname)s] %(message)s") | |
# Print log message with `INFO` level or above onto the screen. | |
sh = logging.StreamHandler(stream=sys.stdout) | |
sh.setLevel(logging.INFO) | |
sh.setFormatter(formatter) | |
logger.addHandler(sh) | |
if not work_dir or not logfile_name: | |
return logger | |
if os.path.exists(work_dir): | |
logger.warning('WARNING: Directory already exists, overwriting images') | |
#raise SystemExit(f'Work directory `{work_dir}` has already existed!\n' | |
# f'Please specify another one.') | |
else: | |
os.makedirs(work_dir) | |
# Save log message with all levels in log file. | |
fh = logging.FileHandler(os.path.join(work_dir, logfile_name)) | |
fh.setLevel(logging.DEBUG) | |
fh.setFormatter(formatter) | |
logger.addHandler(fh) | |
return logger | |