import logging import os from dotenv import load_dotenv # Загрузка переменных из .env load_dotenv() class CustomLogger: """ Универсальный логгер для использования в проекте. """ def __init__(self, name, log_level=None): """ Инициализирует логгер. :param name: Имя логгера (обычно имя функции или класса) :param log_level: Уровень логирования (по умолчанию из .env) """ self.logger = logging.getLogger(name) # Уровень логирования по умолчанию из .env default_level = os.getenv("LOG_LEVEL", "INFO").upper() if log_level: self.log_level = getattr(logging, log_level.upper(), getattr(logging, default_level, logging.INFO)) else: self.log_level = getattr(logging, default_level, logging.INFO) self.setup_logger() def setup_logger(self): """ Настраивает логгер с обработчиком и форматом. """ self.logger.setLevel(self.log_level) # Удаляем старые обработчики, чтобы избежать дублирования if self.logger.hasHandlers(): self.logger.handlers.clear() # Добавляем обработчик для файла file_handler = logging.FileHandler("var/log/project.log") file_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")) file_handler.setLevel(self.log_level) # Добавляем обработчик для консоли console_handler = logging.StreamHandler() console_handler.setFormatter(logging.Formatter("%(name)s - %(levelname)s - %(message)s")) console_handler.setLevel(self.log_level) self.logger.addHandler(file_handler) self.logger.addHandler(console_handler) def get_logger(self): """ Возвращает настроенный логгер. """ return self.logger