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)