diff --git a/breadtube_bot/logger.py b/breadtube_bot/logger.py index 6a5a665..781c150 100644 --- a/breadtube_bot/logger.py +++ b/breadtube_bot/logger.py @@ -6,6 +6,36 @@ import sys import time +class ConsoleColor: + """Simple shortcut to use colors in console""" + HEADER = '\033[95m' + BLUE = '\033[94m' + GREEN = '\033[92m' + ORANGE = '\033[93m' + RED = '\033[91m' + ENDCOLOR = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + + +class ColoredStrFormatStyle(logging.StrFormatStyle): + def __init__(self, fmt, *, defaults=None): + self._fmt = fmt or self.default_format + self._defaults = defaults + self._color = { + logging.CRITICAL: ConsoleColor.RED, + logging.ERROR: ConsoleColor.RED, + logging.WARNING: ConsoleColor.ORANGE, + logging.INFO: ConsoleColor.GREEN, + logging.DEBUG: ConsoleColor.BLUE, + } + self._endcolor = ConsoleColor.ENDCOLOR + + def _format(self, record): + return self._fmt.format(levelcolor=self._color[record.levelno], endcolor=self._endcolor, + **(self._defaults | record.__dict__ if self._defaults else record.__dict__)) + + class MemoryHandler(logging.Handler): def __init__(self, capacity): """ @@ -24,42 +54,12 @@ class MemoryHandler(logging.Handler): logging.Handler.close(self) -class ConsoleColor: - """Simple shortcut to use colors in console""" - HEADER = '\033[95m' - BLUE = '\033[94m' - GREEN = '\033[92m' - ORANGE = '\033[93m' - RED = '\033[91m' - ENDCOLOR = '\033[0m' - BOLD = '\033[1m' - UNDERLINE = '\033[4m' - - -class ColoredFormatter(logging.Formatter): - """Formatter changing the record during format : adds colors to levelname""" - def format(self, record): - levelno = record.levelno - if levelno == logging.ERROR: - levelname_color = ConsoleColor.RED + record.levelname + ConsoleColor.ENDCOLOR - elif levelno == logging.WARNING: - levelname_color = ConsoleColor.ORANGE + record.levelname + ConsoleColor.ENDCOLOR - elif levelno == logging.INFO: - levelname_color = ConsoleColor.GREEN + record.levelname + ConsoleColor.ENDCOLOR - elif levelno == logging.DEBUG: - levelname_color = ConsoleColor.BLUE + record.levelname + ConsoleColor.ENDCOLOR - else: - levelname_color = record.levelname - record.levelname = levelname_color - return logging.Formatter.format(self, record) - - def create_logger(name: str, level: int, buffer_capacity: int, log_dir: Path | None = None, stdout=False) -> tuple[logging.Logger, MemoryHandler]: logger = logging.getLogger(name) logger.setLevel(level) - log_formatter = logging.Formatter('%(asctime)s %(levelname)s : %(message)s') + log_formatter = logging.Formatter('{asctime} {levelname} : {message}', style='{') buffer_handler = MemoryHandler(buffer_capacity) buffer_handler.setFormatter(log_formatter) buffer_handler.setLevel(level) @@ -78,7 +78,9 @@ def create_logger(name: str, level: int, buffer_capacity: int, log_dir: Path | N if stdout: terminal_log_handler = logging.StreamHandler(sys.stdout) terminal_log_handler.setLevel(level) - colored_log_formatter = ColoredFormatter('%(asctime)s %(levelname)s : %(message)s') + fmt = '{asctime} {levelcolor}{levelname}{endcolor} : {message}' + colored_log_formatter = logging.Formatter(fmt, style='{') + colored_log_formatter._style = ColoredStrFormatStyle(fmt) # noqa: SLF001 terminal_log_handler.setFormatter(colored_log_formatter) logger.addHandler(terminal_log_handler)