import os import sys import logging from pathlib import Path def check_environment_var(env_str: str) -> Path: """Liefert Path aus Umgebungsvariable oder beendet mit Fehlermeldung.""" out_path = os.environ.get(env_str) if out_path: return Path(out_path) msg = f"Umgebungsvariable {env_str} ist nicht gesetzt oder leer." print(msg) sys.exit(1) def setup_logger(log_dir: Path, name: str = 'app') -> logging.Logger: """ Erstellt und konfiguriert einen Logger, der sowohl in eine Datei als auch auf die Konsole schreibt. Die Logdatei erhält einen Zeitstempel im Namen und ist UTF-8 kodiert. Args: log_dir (Path): Verzeichnis für die Log-Dateien name (str): Name des Loggers (z.B. 'plant2dxf', 'dxf2lib') Returns: logging.Logger: Konfigurierter Logger """ from datetime import datetime logger = logging.getLogger(name) logger.setLevel(logging.INFO) # Vorherige Handler entfernen, um doppelte Logs zu vermeiden for handler in logger.handlers[:]: logger.removeHandler(handler) # Log-Verzeichnis anlegen (falls nicht vorhanden) log_dir.mkdir(parents=True, exist_ok=True) # Logdatei mit Zeitstempel im Namen erzeugen log_file = log_dir / f"{name}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log" file_handler = logging.FileHandler(log_file, encoding='utf-8') file_handler.setLevel(logging.INFO) # Handler für die Konsole console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) # Einheitliches Log-Format definieren formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) console_handler.setFormatter(formatter) # Handler dem Logger hinzufügen logger.addHandler(file_handler) logger.addHandler(console_handler) return logger