58 lines
No EOL
1.9 KiB
Python
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) |