Spaces:
Sleeping
Sleeping
| # core/logger.py | |
| import logging | |
| import sys | |
| from typing import Optional | |
| try: | |
| from core.config import settings | |
| DEFAULT_LOG_LEVEL = settings.LOG_LEVEL | |
| except ImportError: | |
| DEFAULT_LOG_LEVEL = "INFO" | |
| # logging format: timestamp | log level | logger name | message | |
| LOG_FORMAT = "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s" | |
| DATE_FORMAT = "%Y-%m-%d %H:%M:%S" | |
| def setup_logger(name: str, level: Optional[str] = None) -> logging.Logger: | |
| """ | |
| Returns a standardized logger instance for use in each module. | |
| Usage: logger = setup_logger(__name__) | |
| """ | |
| logger = logging.getLogger(name) | |
| # If the logger already has a handler set up (to prevent duplicate calls), return as is. | |
| if logger.handlers: | |
| return logger | |
| # Set the log level | |
| log_level = level or DEFAULT_LOG_LEVEL | |
| logger.setLevel(getattr(logging, log_level.upper(), logging.INFO)) | |
| # Prevent duplicate logging (do not propagate to parent loggers) | |
| logger.propagate = False | |
| # Create console handler and set level | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(logger.level) | |
| # Apply formatter | |
| formatter = logging.Formatter(fmt=LOG_FORMAT, datefmt=DATE_FORMAT) | |
| console_handler.setFormatter(formatter) | |
| logger.addHandler(console_handler) | |
| return logger |