""" Logging configuration for Gondulf IndieAuth server. Provides structured logging with consistent format across all modules. Uses Python's standard logging module with configurable levels. """ import logging import sys def configure_logging(log_level: str = "INFO", debug: bool = False) -> None: """ Configure application logging. Sets up structured logging format and level for all Gondulf modules. Logs to stdout/stderr for container-friendly output. Args: log_level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) debug: If True, overrides log_level to DEBUG """ # Determine effective log level effective_level = "DEBUG" if debug else log_level # Configure root logger logging.basicConfig( level=effective_level, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S", stream=sys.stdout, force=True, # Override any existing configuration ) # Set level for gondulf modules specifically gondulf_logger = logging.getLogger("gondulf") gondulf_logger.setLevel(effective_level) # Reduce noise from third-party libraries in production if not debug: logging.getLogger("urllib3").setLevel(logging.WARNING) logging.getLogger("sqlalchemy").setLevel(logging.WARNING) logging.info(f"Logging configured: level={effective_level}") def get_logger(name: str) -> logging.Logger: """ Get a logger instance for a module. Args: name: Logger name (typically __name__ from calling module) Returns: Configured logger instance """ return logging.getLogger(name)