auto-diffuser-config / debug_config.py
chansung's picture
Upload folder using huggingface_hub
aae35f1 verified
"""
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()