Files

59 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
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