From 4e7888259f7d2ed5afb0161164d9c5369086f254 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 29 Jan 2021 13:17:31 +0100 Subject: [PATCH] Add logging wrapper for exceptions --- nw/__init__.py | 4 ++-- nw/error.py | 23 +++++++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/nw/__init__.py b/nw/__init__.py index 02ac7162..2ee82184 100644 --- a/nw/__init__.py +++ b/nw/__init__.py @@ -32,7 +32,7 @@ import logging from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication, QErrorMessage -from nw.error import exceptionHandler +from nw.error import exceptionHandler, logException from nw.config import Config ## @@ -270,7 +270,7 @@ def main(sysArgs=None): info["CFBundleName"] = "novelWriter" except ImportError as e: logger.error("Failed to set application name") - logger.error(str(e)) + logException(e) # Import GUI (after dependency checks), and launch from nw.guimain import GuiMain diff --git a/nw/error.py b/nw/error.py index 1f879e37..ecfc3b77 100644 --- a/nw/error.py +++ b/nw/error.py @@ -24,12 +24,31 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ +import sys +import logging + from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( qApp, QDialog, QGridLayout, QStyle, QPlainTextEdit, QLabel, QDialogButtonBox ) +logger = logging.getLogger(__name__) + +# =============================================================================================== # +# Utility Functions +# =============================================================================================== # + +def logException(exObj): + """Log the content of an exception message. + """ + exType, exValue, _ = sys.exc_info() + logger.error("%s: %s" % (exType.__name__, str(exValue).strip("'"))) + +# =============================================================================================== # +# Error Handler +# =============================================================================================== # + class NWErrorMessage(QDialog): def __init__(self, parent): @@ -72,7 +91,6 @@ class NWErrorMessage(QDialog): """Generate a message and append session data, error info and error traceback. """ - import sys from traceback import format_tb from nw import __issuesurl__, __version__ from PyQt5.Qt import PYQT_VERSION_STR @@ -133,15 +151,12 @@ class NWErrorMessage(QDialog): # END Class NWErrorMessage - def exceptionHandler(exType, exValue, exTrace): """Function to catch unhandled global exceptions. """ - import logging from traceback import print_tb from PyQt5.QtWidgets import qApp - logger = logging.getLogger(__name__) logger.critical("%s: %s" % (exType.__name__, str(exValue))) print_tb(exTrace)