Spaces:
Sleeping
Sleeping
| """ | |
| Logging configuration for the application. | |
| """ | |
| import logging | |
| import os | |
| from logging.handlers import RotatingFileHandler | |
| from pathlib import Path | |
| def setup_logger(name: str = None) -> logging.Logger: | |
| """ | |
| Configure and return a logger instance. | |
| Args: | |
| name: Name of the logger (usually __name__ of the module) | |
| Returns: | |
| Configured logger instance | |
| """ | |
| # Use /tmp/logs directory which is writable in container environments | |
| logs_dir = Path("/tmp/logs") | |
| logs_dir.mkdir(exist_ok=True, mode=0o777) # Ensure directory is writable | |
| # Create a custom logger | |
| logger = logging.getLogger(name or __name__) | |
| logger.setLevel(logging.INFO) | |
| # Create formatters | |
| console_formatter = logging.Formatter( | |
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s' | |
| ) | |
| file_formatter = logging.Formatter( | |
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s - [%(filename)s:%(lineno)d]' | |
| ) | |
| # Console handler | |
| console_handler = logging.StreamHandler() | |
| console_handler.setLevel(logging.INFO) | |
| console_handler.setFormatter(console_formatter) | |
| # File handler with rotation (10MB per file, keep 5 backups) | |
| file_handler = RotatingFileHandler( | |
| logs_dir / 'app.log', | |
| maxBytes=10*1024*1024, # 10MB | |
| backupCount=5, | |
| encoding='utf-8' | |
| ) | |
| file_handler.setLevel(logging.DEBUG) | |
| file_handler.setFormatter(file_formatter) | |
| # Add handlers to the logger | |
| if not logger.handlers: # Avoid duplicate handlers | |
| logger.addHandler(console_handler) | |
| logger.addHandler(file_handler) | |
| return logger | |