Spaces:
Running
Running
| import logging | |
| import time | |
| from datetime import timedelta | |
| class LogFormatter: | |
| def __init__(self): | |
| self.start_time = time.time() | |
| def format(self, record): | |
| elapsed_seconds = round(record.created - self.start_time) | |
| prefix = "%s - %s - %s" % ( | |
| record.levelname, | |
| time.strftime("%x %X"), | |
| timedelta(seconds=elapsed_seconds), | |
| ) | |
| message = record.getMessage() | |
| message = message.replace("\n", "\n" + " " * (len(prefix) + 3)) | |
| return "%s - %s" % (prefix, message) | |
| def create_logger(filepath, args): | |
| # create log formatter | |
| log_formatter = LogFormatter() | |
| # create file handler and set level to debug | |
| file_handler = logging.FileHandler(filepath, "a") | |
| file_handler.setLevel(logging.DEBUG) | |
| file_handler.setFormatter(log_formatter) | |
| # create console handler and set level to info | |
| console_handler = logging.StreamHandler() | |
| console_handler.setLevel(logging.INFO) | |
| console_handler.setFormatter(log_formatter) | |
| # create logger and set level to debug | |
| logger = logging.getLogger() | |
| logger.handlers = [] | |
| logger.setLevel(logging.DEBUG) | |
| logger.propagate = False | |
| logger.addHandler(file_handler) | |
| logger.addHandler(console_handler) | |
| # reset logger elapsed time | |
| def reset_time(): | |
| log_formatter.start_time = time.time() | |
| logger.reset_time = reset_time | |
| logger.info( | |
| "\n".join( | |
| "%s: %s" % (k, str(v)) | |
| for k, v in sorted(dict(vars(args)).items(), key=lambda x: x[0]) | |
| ) | |
| ) | |
| return logger | |