mindnet/app/core/logging_setup.py

53 lines
2.0 KiB
Python

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}")