import logging import logging.handlers import os from typing import Dict from config.settings import ( LOG_DIR, LOG_SUBDIRS, LOG_LEVEL, LOG_FORMAT, LOG_DATE_FORMAT, get_log_file, ensure_log_directories ) # Dictionary zur Speicherung der konfigurierten Logger _loggers: Dict[str, logging.Logger] = {} def setup_logging(): """Initialisiert das Logging-System und erstellt alle erforderlichen Verzeichnisse.""" ensure_log_directories() # Root-Logger konfigurieren root_logger = logging.getLogger() root_logger.setLevel(getattr(logging, LOG_LEVEL)) # Alle Handler entfernen for handler in root_logger.handlers[:]: root_logger.removeHandler(handler) # Formatter erstellen formatter = logging.Formatter(LOG_FORMAT, LOG_DATE_FORMAT) # Console Handler für alle Logs console_handler = logging.StreamHandler() console_handler.setLevel(getattr(logging, LOG_LEVEL)) console_handler.setFormatter(formatter) root_logger.addHandler(console_handler) # File Handler für allgemeine App-Logs app_log_file = get_log_file("app") app_handler = logging.handlers.RotatingFileHandler( app_log_file, maxBytes=10*1024*1024, backupCount=5 ) app_handler.setLevel(getattr(logging, LOG_LEVEL)) app_handler.setFormatter(formatter) root_logger.addHandler(app_handler) def get_logger(category: str) -> logging.Logger: """ Gibt einen konfigurierten Logger für eine bestimmte Kategorie zurück. Args: category: Log-Kategorie (app, scheduler, auth, jobs, printers, errors) Returns: logging.Logger: Konfigurierter Logger """ if category in _loggers: return _loggers[category] # Logger erstellen logger = logging.getLogger(f"myp.{category}") logger.setLevel(getattr(logging, LOG_LEVEL)) # Verhindere doppelte Logs durch Parent-Logger logger.propagate = False # Formatter erstellen formatter = logging.Formatter(LOG_FORMAT, LOG_DATE_FORMAT) # Console Handler console_handler = logging.StreamHandler() console_handler.setLevel(getattr(logging, LOG_LEVEL)) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File Handler für spezifische Kategorie log_file = get_log_file(category) file_handler = logging.handlers.RotatingFileHandler( log_file, maxBytes=10*1024*1024, backupCount=5 ) file_handler.setLevel(getattr(logging, LOG_LEVEL)) file_handler.setFormatter(formatter) logger.addHandler(file_handler) # Error-Logs zusätzlich in errors.log schreiben if category != "errors": error_log_file = get_log_file("errors") error_handler = logging.handlers.RotatingFileHandler( error_log_file, maxBytes=10*1024*1024, backupCount=5 ) error_handler.setLevel(logging.ERROR) error_handler.setFormatter(formatter) logger.addHandler(error_handler) _loggers[category] = logger return logger def log_startup_info(): """Loggt Startup-Informationen.""" app_logger = get_logger("app") app_logger.info("=" * 50) app_logger.info("MYP (Manage Your Printers) wird gestartet...") app_logger.info(f"Log-Verzeichnis: {LOG_DIR}") app_logger.info(f"Log-Level: {LOG_LEVEL}") app_logger.info("=" * 50)