|
""" |
|
Common logging module for axolotl |
|
""" |
|
|
|
import os |
|
import sys |
|
from logging import Formatter |
|
from logging.config import dictConfig |
|
from typing import Any, Dict |
|
|
|
from colorama import Fore, Style, init |
|
|
|
|
|
class ColorfulFormatter(Formatter): |
|
""" |
|
Formatter to add coloring to log messages by log type |
|
""" |
|
|
|
COLORS = { |
|
"WARNING": Fore.YELLOW, |
|
"ERROR": Fore.RED, |
|
"CRITICAL": Fore.RED + Style.BRIGHT, |
|
} |
|
|
|
def format(self, record): |
|
record.rank = int(os.getenv("LOCAL_RANK", "0")) |
|
log_message = super().format(record) |
|
return self.COLORS.get(record.levelname, "") + log_message + Fore.RESET |
|
|
|
|
|
DEFAULT_LOGGING_CONFIG: Dict[str, Any] = { |
|
"version": 1, |
|
"disable_existing_loggers": False, |
|
"formatters": { |
|
"simple": { |
|
"format": "[%(asctime)s] [%(levelname)s] [%(name)s.%(funcName)s:%(lineno)d] [PID:%(process)d] %(message)s", |
|
}, |
|
"colorful": { |
|
"()": ColorfulFormatter, |
|
"format": "[%(asctime)s] [%(levelname)s] [%(name)s.%(funcName)s:%(lineno)d] [PID:%(process)d] [RANK:%(rank)d] %(message)s", |
|
}, |
|
}, |
|
"filters": {}, |
|
"handlers": { |
|
"console": { |
|
"class": "logging.StreamHandler", |
|
"formatter": "simple", |
|
"filters": [], |
|
"stream": sys.stdout, |
|
}, |
|
"color_console": { |
|
"class": "logging.StreamHandler", |
|
"formatter": "colorful", |
|
"filters": [], |
|
"stream": sys.stdout, |
|
}, |
|
}, |
|
"root": {"handlers": ["console"], "level": os.getenv("LOG_LEVEL", "INFO")}, |
|
"loggers": { |
|
"axolotl": { |
|
"handlers": ["color_console"], |
|
"level": "DEBUG", |
|
"propagate": False, |
|
}, |
|
}, |
|
} |
|
|
|
|
|
def configure_logging(): |
|
"""Configure with default logging""" |
|
init() |
|
dictConfig(DEFAULT_LOGGING_CONFIG) |
|
|