74 lines
No EOL
2.5 KiB
Python
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) |