python.video_converter_v3/app/class_settings.py
2025-03-31 21:35:21 +02:00

58 lines
No EOL
1.9 KiB
Python

import logging
import yaml
import traceback
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler
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()}"
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):
print(self.yaml)
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)