From eab19f69bf3d5e99392f07446d1a69d86c98edfb Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 18 Sep 2025 12:30:57 +0000 Subject: [PATCH] v1.2.1 - Bugfix Silent Logging & Robuste Konfiguration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bugfix: Behebt das Problem, bei dem keine Log-Ausgaben im Terminal oder in der Log-Datei erschienen sind. - Die Skript-Struktur wurde angepasst, um eine robuste `setup_logging`-Funktion zu implementieren, die eine implizite Standard-Konfiguration durch importierte Module erkennt und überschreibt. - Stellt sicher, dass die benutzerdefinierte Logging-Konfiguration (DEBUG-Level, File-Handler) zuverlässig angewendet wird. - Das Skript protokolliert nun alle Prozessschritte wie vorgesehen, insbesondere die Analyse der Branchen-Spezifität. --- knowledge_base_builder.py | 44 ++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/knowledge_base_builder.py b/knowledge_base_builder.py index b445618a..23c1860f 100644 --- a/knowledge_base_builder.py +++ b/knowledge_base_builder.py @@ -1,14 +1,17 @@ # knowledge_base_builder.py -__version__ = "v1.2.0" +__version__ = "v1.2.1" import logging import json import re +import os +import sys from collections import Counter import pandas as pd from google_sheet_handler import GoogleSheetHandler +from helpers import create_log_filename from config import Config # --- Konfiguration --- @@ -54,10 +57,7 @@ BRANCH_GROUP_RULES = { ] } -# --- NEU: Angepasste und konfigurierbare Schwellenwerte --- -# Ein Department muss mindestens so viele Einträge haben, um eine Branchen-Regel zu bekommen. MIN_SAMPLES_FOR_BRANCH_RULE = 5 -# Wenn >X% der Jobtitel eines Departments in EINER Branchengruppe liegen, gilt es als spezifisch. BRANCH_SPECIFICITY_THRESHOLD = 0.7 STOP_WORDS = { @@ -69,9 +69,40 @@ STOP_WORDS = { 'cfo', 'cto', 'coo', 'von', 'of', 'und', 'für', 'der', 'die', 'das', '&' } +def setup_logging(): + """Konfiguriert das Logging, um sowohl in der Konsole als auch in einer Datei zu loggen.""" + log_filename = create_log_filename("knowledge_base_builder") + if not log_filename: + print("KRITISCHER FEHLER: Log-Datei konnte nicht erstellt werden. Logge nur in die Konsole.") + logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[logging.StreamHandler()]) + return + + log_level = logging.DEBUG + + root_logger = logging.getLogger() + if root_logger.handlers: + for handler in root_logger.handlers[:]: + root_logger.removeHandler(handler) + + logging.basicConfig( + level=log_level, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + handlers=[ + logging.FileHandler(log_filename, encoding='utf-8'), + logging.StreamHandler() + ] + ) + + logging.getLogger("gspread").setLevel(logging.WARNING) + logging.getLogger("oauth2client").setLevel(logging.WARNING) + + logging.info(f"Logging erfolgreich initialisiert. Log-Datei: {log_filename}") + def build_knowledge_base(): - logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') + """ + Hauptfunktion zur Erstellung der Wissensbasis. + """ logger = logging.getLogger(__name__) logger.info(f"Starte Erstellung der Wissensbasis (Version {__version__})...") @@ -130,7 +161,6 @@ def build_knowledge_base(): department_branches = branches_by_department.get(department, []) total_titles_in_dept = len(department_branches) - # Angepasste Logik mit transparentem Logging if total_titles_in_dept >= MIN_SAMPLES_FOR_BRANCH_RULE: branch_group_counts = Counter() for branch_name in department_branches: @@ -151,7 +181,6 @@ def build_knowledge_base(): else: logger.debug(f" -> Department '{department}' hat zu wenige Datenpunkte ({total_titles_in_dept} < {MIN_SAMPLES_FOR_BRANCH_RULE}) für eine Branchen-Regel.") - keyword_rules[department] = rule try: @@ -166,4 +195,5 @@ def build_knowledge_base(): if __name__ == "__main__": + setup_logging() build_knowledge_base() \ No newline at end of file