import logging import os from logging.handlers import RotatingFileHandler from dotenv import load_dotenv load_dotenv() # Configuration values LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper() LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" LOG_DIR = os.getenv("LOG_DIR", os.path.join(os.getcwd(), "logs")) # Ensure log directory exists os.makedirs(LOG_DIR, exist_ok=True) # Log file path LOG_FILE = os.path.join(LOG_DIR, "app.log") # Create root logger logger = logging.getLogger("gpt-agent") logger.setLevel(LOG_LEVEL) # Formatter formatter = logging.Formatter(LOG_FORMAT) # Console handler console_handler = logging.StreamHandler() console_handler.setLevel(LOG_LEVEL) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # Rotating file handler file_handler = RotatingFileHandler(LOG_FILE, maxBytes=5*1024*1024, backupCount=5) file_handler.setLevel(LOG_LEVEL) file_handler.setFormatter(formatter) logger.addHandler(file_handler) def get_logger(name: str | None = None) -> logging.Logger: """ Retrieve a configured logger instance. If name is provided, returns a child logger of the configured root logger. """ if name: return logger.getChild(name) return logger