import logging import os from logging.handlers import RotatingFileHandler def setup_logging(log_level: int = None): """ Konfiguriert das Logging-System mit File- und Console-Handler. WP-24c v4.4.0-DEBUG: Unterstützt DEBUG-Level für End-to-End Tracing. Args: log_level: Optionales Log-Level (logging.DEBUG, logging.INFO, etc.) Falls nicht gesetzt, wird aus DEBUG Umgebungsvariable gelesen. """ # 1. Log-Level bestimmen if log_level is None: # WP-24c v4.4.0-DEBUG: Unterstützung für DEBUG-Level via Umgebungsvariable debug_mode = os.getenv("DEBUG", "false").lower() == "true" log_level = logging.DEBUG if debug_mode else logging.INFO # 2. Log-Verzeichnis erstellen (falls nicht vorhanden) log_dir = "logs" if not os.path.exists(log_dir): os.makedirs(log_dir) log_file = os.path.join(log_dir, "mindnet.log") # 3. Formatter definieren (Zeitstempel | Level | Modul | Nachricht) formatter = logging.Formatter( '%(asctime)s | %(levelname)-8s | %(name)s | %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # 4. File Handler: Schreibt in Datei (max. 5MB pro Datei, behält 5 Backups) file_handler = RotatingFileHandler( log_file, maxBytes=5*1024*1024, backupCount=5, encoding='utf-8' ) file_handler.setFormatter(formatter) file_handler.setLevel(log_level) # WP-24c v4.4.0-DEBUG: Respektiert log_level # 5. Stream Handler: Schreibt weiterhin auf die Konsole console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) console_handler.setLevel(log_level) # WP-24c v4.4.0-DEBUG: Respektiert log_level # 6. Root Logger konfigurieren logging.basicConfig( level=log_level, handlers=[file_handler, console_handler], force=True # Überschreibt bestehende Konfiguration ) level_name = "DEBUG" if log_level == logging.DEBUG else "INFO" logging.info(f"📝 Logging initialized (Level: {level_name}). Writing to {log_file}")