From 163a814dc48b7f7a17f06fc12767dde1f80a14ac Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sat, 27 Apr 2019 18:25:28 +0200 Subject: [PATCH] logging: log exceptions caught by crash reporter --- electrum/gui/kivy/uix/dialogs/crash_reporter.py | 7 +++++-- electrum/gui/qt/exception_window.py | 11 ++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/electrum/gui/kivy/uix/dialogs/crash_reporter.py b/electrum/gui/kivy/uix/dialogs/crash_reporter.py index f02222fd7..2ad5dc876 100644 --- a/electrum/gui/kivy/uix/dialogs/crash_reporter.py +++ b/electrum/gui/kivy/uix/dialogs/crash_reporter.py @@ -13,6 +13,7 @@ from kivy.utils import platform from electrum.gui.kivy.i18n import _ from electrum.base_crash_reporter import BaseCrashReporter +from electrum.logging import Logger Builder.load_string(''' @@ -172,9 +173,10 @@ class CrashReportDetails(Factory.Popup): print(text) -class ExceptionHook(base.ExceptionHandler): +class ExceptionHook(base.ExceptionHandler, Logger): def __init__(self, main_window): - super().__init__() + base.ExceptionHandler.__init__(self) + Logger.__init__(self) self.main_window = main_window if not main_window.electrum_config.get(BaseCrashReporter.config_key, default=True): return @@ -185,6 +187,7 @@ class ExceptionHook(base.ExceptionHandler): def handle_exception(self, _inst): exc_info = sys.exc_info() + self.logger.error('exception caught by crash reporter', exc_info=exc_info) # Check if this is an exception from within the exception handler: import traceback for item in traceback.extract_tb(exc_info[2]): diff --git a/electrum/gui/qt/exception_window.py b/electrum/gui/qt/exception_window.py index aea66cfae..9d8d69100 100644 --- a/electrum/gui/qt/exception_window.py +++ b/electrum/gui/qt/exception_window.py @@ -108,7 +108,6 @@ class Exception_Window(BaseCrashReporter, QWidget, MessageBoxMixin, Logger): def on_close(self): Exception_Window._active_window = None - sys.__excepthook__(*self.exc_args) self.close() def show_never(self): @@ -134,16 +133,18 @@ def _show_window(*args): Exception_Window._active_window = Exception_Window(*args) -class Exception_Hook(QObject): +class Exception_Hook(QObject, Logger): _report_exception = QtCore.pyqtSignal(object, object, object, object) def __init__(self, main_window, *args, **kwargs): - super(Exception_Hook, self).__init__(*args, **kwargs) + QObject.__init__(self, *args, **kwargs) + Logger.__init__(self) if not main_window.config.get(BaseCrashReporter.config_key, default=True): return self.main_window = main_window sys.excepthook = self.handler self._report_exception.connect(_show_window) - def handler(self, *args): - self._report_exception.emit(self.main_window, *args) + def handler(self, *exc_info): + self.logger.error('exception caught by crash reporter', exc_info=exc_info) + self._report_exception.emit(self.main_window, *exc_info)