import logging import os class LoggingFormatter(logging.Formatter): black = "\x1b[30m" red = "\x1b[31m" green = "\x1b[32m" yellow = "\x1b[33m" blue = "\x1b[34m" gray = "\x1b[38m" reset = "\x1b[0m" bold = "\x1b[1m" COLORS = { logging.DEBUG: gray + bold, logging.INFO: blue + bold, logging.WARNING: yellow + bold, logging.ERROR: red, logging.CRITICAL: red + bold, } def format(self, record): log_color = self.COLORS[record.levelno] format = "(black){asctime}(reset) (levelcolor){levelname:<8}(reset) (green){name}(reset) {message}" format = format.replace("(black)", self.black + self.bold) format = format.replace("(reset)", self.reset) format = format.replace("(levelcolor)", log_color) format = format.replace("(green)", self.green + self.bold) formatter = logging.Formatter(format, "%Y-%m-%d %H:%M:%S", style="{") return formatter.format(record) def setup_logger(): logger = logging.getLogger("discord_bot") logger.setLevel(logging.INFO) console_handler = logging.StreamHandler() console_handler.setFormatter(LoggingFormatter()) log_file_path = os.getenv("LOG_FILE", "logs/discord.log") log_dir = os.path.dirname(log_file_path) if log_dir: os.makedirs(log_dir, exist_ok=True) file_handler = logging.FileHandler(filename=log_file_path, encoding="utf-8", mode="w") file_handler_formatter = logging.Formatter( "[{asctime}] [{levelname:<8}] {name}: {message}", "%Y-%m-%d %H:%M:%S", style="{" ) file_handler.setFormatter(file_handler_formatter) logger.addHandler(console_handler) logger.addHandler(file_handler) return logger