VibeToken / utils /logger.py
APGASU's picture
scripts
7bef20f verified
"""Util functions supporting logging to terminal and files."""
import functools
import sys
from accelerate.logging import MultiProcessAdapter
import logging
from termcolor import colored
from iopath.common.file_io import PathManager as PathManagerClass
__all__ = ["setup_logger", "PathManager"]
PathManager = PathManagerClass()
class _ColorfulFormatter(logging.Formatter):
def __init__(self, *args, **kwargs):
self._root_name = kwargs.pop("root_name") + "."
self._abbrev_name = kwargs.pop("abbrev_name", self._root_name)
if len(self._abbrev_name):
self._abbrev_name = self._abbrev_name + "."
super(_ColorfulFormatter, self).__init__(*args, **kwargs)
def formatMessage(self, record):
record.name = record.name.replace(self._root_name, self._abbrev_name)
log = super(_ColorfulFormatter, self).formatMessage(record)
if record.levelno == logging.WARNING:
prefix = colored("WARNING", "red", attrs=["blink"])
elif record.levelno == logging.ERROR or record.levelno == logging.CRITICAL:
prefix = colored("ERROR", "red", attrs=["blink", "underline"])
else:
return log
return prefix + " " + log
@functools.lru_cache()
def setup_logger(name="TiTok", log_level: str = None, color=True, use_accelerate=True,
output_file=None):
logger = logging.getLogger(name)
if log_level is None:
logger.setLevel(logging.DEBUG)
else:
logger.setLevel(log_level.upper())
plain_formatter = logging.Formatter(
"[%(asctime)s] %(name)s %(levelname)s: %(message)s", datefmt="%m/%d %H:%M:%S"
)
ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)
if color:
formatter = _ColorfulFormatter(
colored("[%(asctime)s %(name)s]: ", "green") + "%(message)s",
datefmt="%m/%d %H:%M:%S",
root_name=name,
)
else:
formatter = plain_formatter
ch.setFormatter(formatter)
logger.addHandler(ch)
if output_file is not None:
fileHandler = logging.FileHandler(output_file)
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler)
if use_accelerate:
return MultiProcessAdapter(logger, {})
else:
return logger