From 5b40b4b76c0562d59fed122fc51e9812f43f29bd Mon Sep 17 00:00:00 2001 From: bartool Date: Mon, 3 Nov 2025 09:16:47 +0100 Subject: [PATCH] refaktor logging logging na std i debug do pliku --- logging_config.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++ main.py | 12 ++-------- 2 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 logging_config.py diff --git a/logging_config.py b/logging_config.py new file mode 100644 index 0000000..c2e544e --- /dev/null +++ b/logging_config.py @@ -0,0 +1,58 @@ +import logging +import sys +import os +import datetime + +def setup_logging(): + """Konfiguruje zaawansowane logowanie z dwoma handlerami i czyszczeniem starych logów.""" + # 1. Pobierz główny logger, wyczyść istniejące handlery i ustaw najniższy poziom (DEBUG) + logger = logging.getLogger() + if logger.hasHandlers(): + logger.handlers.clear() + logger.setLevel(logging.DEBUG) + + # 2. Utwórz katalog 'logs', jeśli nie istnieje + LOGS_DIR = "logs" + if not os.path.exists(LOGS_DIR): + os.makedirs(LOGS_DIR) + + # 3. Stwórz i skonfiguruj handler dla konsoli (poziom INFO) + console_handler = logging.StreamHandler(sys.stdout) + console_handler.setLevel(logging.INFO) + console_formatter = logging.Formatter('%(levelname)s - %(message)s') + console_handler.setFormatter(console_formatter) + logger.addHandler(console_handler) + + # 4. Stwórz i skonfiguruj handler dla pliku (poziom DEBUG) + log_filename = datetime.datetime.now().strftime("debug_%Y-%m-%d_%H-%M-%S.log") + file_handler = logging.FileHandler(os.path.join(LOGS_DIR, log_filename)) + file_handler.setLevel(logging.DEBUG) + file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + file_handler.setFormatter(file_formatter) + logger.addHandler(file_handler) + + def cleanup_old_logs(log_dir="logs", retention_days=7): + """Usuwa pliki logów starsze niż określona liczba dni.""" + logging.info(f"Rozpoczynam czyszczenie starych logów (starszych niż {retention_days} dni)...") + try: + now = datetime.datetime.now() + cutoff = now - datetime.timedelta(days=retention_days) + files_deleted = 0 + for filename in os.listdir(log_dir): + file_path = os.path.join(log_dir, filename) + # Upewnij się, że to plik i nie jest to aktualnie otwarty plik logu + if os.path.isfile(file_path) and filename != os.path.basename(file_handler.baseFilename): + file_mod_time = datetime.datetime.fromtimestamp(os.path.getmtime(file_path)) + if file_mod_time < cutoff: + os.remove(file_path) + files_deleted += 1 + logging.info(f"Usunięto stary plik logu: {filename}") + if files_deleted == 0: + logging.info("Nie znaleziono starych logów do usunięcia.") + except Exception as e: + logging.warning(f"Wystąpił błąd podczas czyszczenia starych logów: {e}") + + # 5. Uruchom funkcję czyszczącą + cleanup_old_logs(LOGS_DIR) + + logging.info("Logging został skonfigurowany.") diff --git a/main.py b/main.py index 81f756c..64fd0b7 100644 --- a/main.py +++ b/main.py @@ -1,20 +1,12 @@ -import logging -import sys from gsheet_api import GSheetAPI - -# Configure logging -logging.basicConfig( - level=logging.INFO, - format="%(asctime)s - %(levelname)s - %(message)s", - stream=sys.stdout, -) - +from logging_config import setup_logging from mayo import MayoSession from config import MAYO_URL, LOGIN, PASSWORD from workflow import select_sheet, get_sheet_data, save_results from processing import process_all_rows def main(): + setup_logging() gsheet_api = GSheetAPI() sheet_name = select_sheet()