additional logging and error handling

This commit is contained in:
2026-05-29 10:44:50 +02:00
parent 72a0e52e08
commit 9ddc1f5b99
3 changed files with 72 additions and 10 deletions

View File

@@ -8,6 +8,7 @@ import json
import pickle
import re
import sys
import traceback
import uuid
from collections import defaultdict
from collections.abc import Container, Iterable, Sequence
@@ -33,7 +34,9 @@ from PySide6.QtCore import (
QObject,
Qt,
QTimer,
QtMsgType,
Signal,
qInstallMessageHandler,
)
from PySide6.QtGui import QAction
from PySide6.QtWidgets import (
@@ -1073,11 +1076,11 @@ def set_form_data(
value = data
else:
if key not in data:
logger_gui.debug("---- Key not in data: %s")
logger_gui.debug("-------- Data: %s", pformat(data))
logger_gui.error("Key not in data: %s", key)
logger_gui.error("Data:\n%s", pformat(data))
value = data[key]
logger_gui.debug("---- Key set: %s", key)
logger_gui.debug("Key set: %s", key)
set_widget_value(widget, value)
@@ -3634,9 +3637,51 @@ class MainWindow(QMainWindow):
help_menu.addAction(about_action)
# ** global exception handling
def global_exception_handler(exc_type, exc_value, exc_traceback):
"""catches all unhandled errors"""
# format error
error_msg = "".join(traceback.format_exception(exc_type, exc_value, exc_traceback))
logger_gui.critical(f"UNEXPECTED ERROR:\n{error_msg}")
# message to user
# check if QApplication exists otherwise crashing of crash handler possible)
if QApplication.instance():
msg_box = QMessageBox()
msg_box.setIcon(QMessageBox.Icon.Critical)
msg_box.setWindowTitle("Kritischer Fehler")
msg_box.setText(
"Ein unerwarteter Fehler ist aufgetreten. Die Details wurden protokolliert."
)
# details for user or screenshots
msg_box.setDetailedText(error_msg)
msg_box.exec()
sys.exit(1)
def qt_message_handler(mode, context, message):
"""forwards internal Qt C++ warnings to Python loggers"""
if mode == QtMsgType.QtInfoMsg:
logger_gui.info(message)
elif mode == QtMsgType.QtWarningMsg:
logger_gui.warning(message)
elif mode == QtMsgType.QtCriticalMsg:
logger_gui.error(message)
elif mode == QtMsgType.QtFatalMsg:
logger_gui.critical(message)
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setStyleSheet(QSS)
window = MainWindow()
window.show()
sys.exit(app.exec())
sys.excepthook = global_exception_handler
qInstallMessageHandler(qt_message_handler)
try:
app = QApplication(sys.argv)
app.setStyleSheet(QSS)
window = MainWindow()
window.show()
sys.exit(app.exec())
except Exception as err:
logger_gui.critical("Fehler beim Starten der Anwendung:\n%s", str(err), exc_info=True)