Fix log colors

This commit is contained in:
BreadTube 2026-05-27 16:21:57 +09:00
commit 5ff9aa0edb

View file

@ -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)