""" Debug configuration for Auto Diffusers Config Provides centralized logging setup for the entire application """ import logging import os from datetime import datetime def setup_debug_logging(log_level='DEBUG', log_to_file=True, log_to_console=True): """ Set up comprehensive debug logging for the entire application Args: log_level (str): Logging level ('DEBUG', 'INFO', 'WARNING', 'ERROR') log_to_file (bool): Whether to log to files log_to_console (bool): Whether to log to console """ # Create logs directory if it doesn't exist if log_to_file: os.makedirs('logs', exist_ok=True) # Clear any existing handlers root_logger = logging.getLogger() root_logger.handlers.clear() # Set root logging level numeric_level = getattr(logging, log_level.upper(), logging.DEBUG) root_logger.setLevel(numeric_level) # Create formatter formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) handlers = [] # Console handler if log_to_console: console_handler = logging.StreamHandler() console_handler.setLevel(numeric_level) console_handler.setFormatter(formatter) handlers.append(console_handler) # File handlers if log_to_file: timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') # Main application log main_log_file = f'logs/auto_diffusers_{timestamp}.log' file_handler = logging.FileHandler(main_log_file) file_handler.setLevel(numeric_level) file_handler.setFormatter(formatter) handlers.append(file_handler) # Error-only log error_log_file = f'logs/errors_{timestamp}.log' error_handler = logging.FileHandler(error_log_file) error_handler.setLevel(logging.ERROR) error_handler.setFormatter(formatter) handlers.append(error_handler) # Add all handlers to root logger for handler in handlers: root_logger.addHandler(handler) # Set up specific logger configurations configure_component_loggers(numeric_level) logging.info("=" * 80) logging.info("AUTO DIFFUSERS CONFIG - DEBUG SESSION STARTED") logging.info("=" * 80) logging.info(f"Log level: {log_level}") logging.info(f"Logging to console: {log_to_console}") logging.info(f"Logging to file: {log_to_file}") if log_to_file: logging.info(f"Main log file: {main_log_file}") logging.info(f"Error log file: {error_log_file}") logging.info("=" * 80) def configure_component_loggers(level): """Configure logging for individual components""" # Main application components components = [ 'auto_diffusers', 'hardware_detector', 'simple_memory_calculator', 'gradio_app', '__main__' ] for component in components: logger = logging.getLogger(component) logger.setLevel(level) # Don't propagate to avoid duplicate messages logger.propagate = True # Third-party library logging (reduce verbosity) third_party_loggers = { 'urllib3': logging.WARNING, 'requests': logging.WARNING, 'httpx': logging.WARNING, 'gradio': logging.INFO, 'google': logging.INFO, 'huggingface_hub': logging.INFO } for lib_name, lib_level in third_party_loggers.items(): lib_logger = logging.getLogger(lib_name) lib_logger.setLevel(lib_level) def log_system_info(): """Log comprehensive system information at startup""" import platform import sys import os logger = logging.getLogger(__name__) logger.info("SYSTEM INFORMATION:") logger.info(f" Platform: {platform.system()} {platform.release()}") logger.info(f" Architecture: {platform.machine()}") logger.info(f" Python: {sys.version}") logger.info(f" Working directory: {os.getcwd()}") logger.info(f" Process ID: {os.getpid()}") # Environment variables (non-sensitive) env_vars = ['GOOGLE_API_KEY', 'CUDA_VISIBLE_DEVICES', 'PYTORCH_CUDA_ALLOC_CONF'] logger.info("ENVIRONMENT VARIABLES:") for var in env_vars: value = os.getenv(var, 'Not set') if var == 'GOOGLE_API_KEY' and value != 'Not set': value = f"Set (length: {len(value)})" logger.info(f" {var}: {value}") def log_session_end(): """Log session end information""" logger = logging.getLogger(__name__) logger.info("=" * 80) logger.info("AUTO DIFFUSERS CONFIG - DEBUG SESSION ENDED") logger.info("=" * 80) if __name__ == "__main__": # Example usage setup_debug_logging(log_level='DEBUG') log_system_info() # Test logging from different components logger = logging.getLogger(__name__) logger.debug("This is a debug message") logger.info("This is an info message") logger.warning("This is a warning message") logger.error("This is an error message") log_session_end()