python.video_converter_v3/app/class_settings.py

74 lines
No EOL
2.5 KiB
Python

import logging
import yaml
import traceback
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler
# === ANSI-Farbcodes für Konsole ===
RESET = "\x1b[0m" # Farbe zurücksetzen
RED = "\x1b[31m" # Fehler: Rot
YELLOW = "\x1b[33m" # Warnung: Gelb
GREEN = "\x1b[32m" # Info: Grün
BLUE = "\x1b[34m" # Debug: Blau
class CustomFormatter(logging.Formatter):
def format(self, record):
if record.levelno >= logging.ERROR and record.exc_info:
record.msg = f"{record.msg}\n{traceback.format_exc()}"
# Farbe nach Level
if record.levelno == logging.DEBUG:
record.msg = f"{BLUE}{record.msg}{RESET}"
elif record.levelno == logging.INFO:
record.msg = f"{GREEN}{record.msg}{RESET}"
elif record.levelno == logging.WARNING:
record.msg = f"{YELLOW}{record.msg}{RESET}"
elif record.levelno >= logging.ERROR:
record.msg = f"{RED}{record.msg}{RESET}"
return super().format(record)
class Settings:
def __init__(self):
self.yaml = None
self.read()
def read(self):
with open("app/cfg/settings.yaml", "r", encoding="utf-8") as file:
self.yaml = yaml.safe_load(file)
def write(self):
with open("app/cfg/settings.yaml", "w", encoding="utf8") as file:
yaml.dump(self.yaml, file, default_flow_style=False, indent=4)
def set_logging(self):
log_level = self.yaml.get("log_level", "INFO")
log_file = self.yaml.get("log_file", "app.log")
log_mode = self.yaml.get("log_rotation", "size") # "time" oder "size"
handlers = [logging.StreamHandler()]
# Handler je nach Modus erstellen
if log_mode == "time":
log_handler = TimedRotatingFileHandler(
f"app/logs/{log_file}", when="midnight", interval=1, backupCount=7, encoding="utf-8"
)
else:
log_handler = RotatingFileHandler(
f"app/logs/{log_file}", maxBytes=5 * 1024 * 1024, backupCount=5, encoding="utf-8"
)
handlers.append(log_handler)
# Logger konfigurieren
logging.basicConfig(
level=log_level,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=handlers
)
# Traceback-Formatter setzen
formatter = CustomFormatter("%(asctime)s - %(levelname)s - %(message)s")
for handler in logging.getLogger().handlers:
handler.setFormatter(formatter)