From 3849e3fc2dea2d76303ba70f6041bb7103fd5dc9 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Mon, 9 Feb 2026 15:59:29 -0600 Subject: [PATCH] fix for logger --- email-worker/logger.py | 68 +++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/email-worker/logger.py b/email-worker/logger.py index 7af1ee1..5c83534 100644 --- a/email-worker/logger.py +++ b/email-worker/logger.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -Structured logging for email worker with Daily Rotation +Structured logging for email worker with Daily Rotation (Robust Version) """ import os @@ -8,7 +8,6 @@ import sys import logging import threading from logging.handlers import TimedRotatingFileHandler -from datetime import datetime # Konfiguration LOG_DIR = "/var/log/email-worker" @@ -19,61 +18,62 @@ logger = logging.getLogger("unified-worker") logger.setLevel(logging.INFO) logger.propagate = False -# Formatierung definieren: [Timestamp] [Level] [Thread] Nachricht -# Hinweis: worker_name wird in der Funktion 'log' manuell eingefügt +# Formatierung formatter = logging.Formatter( '[%(asctime)s] [%(levelname)s] [%(threadName)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) -# 1. Console Handler (damit 'docker logs' weiterhin etwas anzeigt) +# 1. Console Handler (Immer aktiv!) console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) logger.addHandler(console_handler) -# 2. File Handler mit täglicher Rotation -# Prüfen, ob das Verzeichnis schreibbar ist (durch Docker Volume Mount) -if os.path.exists(LOG_DIR): +# 2. File Handler (Robustes Setup) +try: + # Versuchen, das Verzeichnis zu erstellen, falls es fehlt + os.makedirs(LOG_DIR, exist_ok=True) + + file_handler = TimedRotatingFileHandler( + LOG_FILE, + when="midnight", + interval=1, + backupCount=30, + encoding='utf-8' + ) + file_handler.setFormatter(formatter) + file_handler.suffix = "%Y-%m-%d" + logger.addHandler(file_handler) + + # Erfolgsmeldung auf Konsole (damit wir sehen, dass es geklappt hat) + print(f"✓ Logging to file enabled: {LOG_FILE}") + +except Exception as e: + # Fallback: Ausführliche Fehlerdiagnose auf stdout + error_msg = f"⚠ LOGGING ERROR: Could not write to {LOG_FILE}\n" + error_msg += f" Error: {e}\n" try: - # when="midnight": Rotiert jede Nacht um 00:00 Uhr - # backupCount=30: Behält Logs für 30 Tage - file_handler = TimedRotatingFileHandler( - LOG_FILE, - when="midnight", - interval=1, - backupCount=30, - encoding='utf-8' - ) - file_handler.setFormatter(formatter) - # Suffix für rotierte Dateien: worker.log.2023-10-27 - file_handler.suffix = "%Y-%m-%d" - logger.addHandler(file_handler) - except Exception as e: - print(f"⚠ Logging Setup Error: Could not create file handler: {e}") + error_msg += f" Current User (UID): {os.getuid()}\n" + error_msg += f" Current Group (GID): {os.getgid()}\n" + except: + pass + print(error_msg) def log(message: str, level: str = 'INFO', worker_name: str = 'unified-worker'): """ - Structured logging with timestamp and thread info. - Drop-In Replacement for original print-based logging. + Structured logging function """ - # Mapping von String-Levels zu logging Konstanten lvl_map = { 'DEBUG': logging.DEBUG, 'INFO': logging.INFO, 'WARNING': logging.WARNING, 'ERROR': logging.ERROR, 'CRITICAL': logging.CRITICAL, - 'SUCCESS': logging.INFO # 'SUCCESS' gibt es im Standard nicht, wir nutzen INFO + 'SUCCESS': logging.INFO } log_level = lvl_map.get(level.upper(), logging.INFO) - - # Prefix für SUCCESS Level manuell hinzufügen, da es im Standard-Logging fehlt - prefix = "" - if level.upper() == 'SUCCESS': - prefix = "[SUCCESS] " - - # Den worker_name in die Nachricht integrieren + prefix = "[SUCCESS] " if level.upper() == 'SUCCESS' else "" final_message = f"[{worker_name}] {prefix}{message}" logger.log(log_level, final_message) \ No newline at end of file