import logging import time import os class ColoredFormatter(logging.Formatter): # Цветные логи (для терминала) LEVEL_COLORS = { logging.INFO: '\033[92m', logging.WARNING: '\033[93m', logging.ERROR: '\033[91m', logging.CRITICAL: '\033[91m' } LEVEL_NAMES = { logging.INFO: "I", logging.WARNING: "W", logging.ERROR: "E", logging.CRITICAL: "C" } def format(self, record): local_time = time.localtime(record.created) time_str = time.strftime("%H:%M:%S", local_time) date_str = time.strftime("%d-%m-%Y", local_time) level_name = self.LEVEL_NAMES.get(record.levelno, record.levelname) message = f"[{time_str}] [{date_str}] [{level_name}] {record.getMessage()}" color = self.LEVEL_COLORS.get(record.levelno, "") return f"{color}{message}\033[0m" if color else message class UncoloredFormatter(logging.Formatter): # Бесцветные логи (для bot.log) def format(self, record): local_time = time.localtime(record.created) time_str = time.strftime("%H:%M:%S", local_time) date_str = time.strftime("%d-%m-%Y", local_time) level_name = ColoredFormatter.LEVEL_NAMES.get( record.levelno, record.levelname ) return f"[{time_str}] [{date_str}] [{level_name}] {record.getMessage()}" def setup_logging(): # Инициализирует систему логирования # Создаем корневой логгер logger = logging.getLogger() logger.setLevel(logging.INFO) # Проверяем, не настроен ли логгер ранее if not logger.hasHandlers(): console_handler = logging.StreamHandler() console_handler.setFormatter(ColoredFormatter()) # Сохраняем логи в файл file_handler = logging.FileHandler("bot.log", encoding='utf-8') file_handler.setFormatter(UncoloredFormatter()) logger.addHandler(console_handler) logger.addHandler(file_handler) return logger