59 lines
1.9 KiB
Python
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
|