Merge pull request #11193 from Ultimaker/CURA-8760_Crash_when_installing_plugins

Ensure that stored log lines are sent to sentry if they haven't already been logged
This commit is contained in:
Casper Lamboo 2022-01-04 15:56:48 +01:00 committed by GitHub
commit b7357d054b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 2 deletions

View file

@ -12,10 +12,12 @@ import json
import locale
from typing import cast, Any
import sentry_sdk
try:
from sentry_sdk.hub import Hub
from sentry_sdk.utils import event_from_exception
from sentry_sdk import configure_scope
from sentry_sdk import configure_scope, add_breadcrumb
with_sentry_sdk = True
except ImportError:
with_sentry_sdk = False
@ -424,6 +426,13 @@ class CrashHandler:
if with_sentry_sdk:
try:
hub = Hub.current
if not Logger.getLoggers():
# No loggers have been loaded yet, so we don't have any breadcrumbs :(
# So add them manually so we at least have some info...
add_breadcrumb(level = "info", message = "SentryLogging was not initialised yet")
for log_type, line in Logger.getUnloggedLines():
add_breadcrumb(message=line)
event, hint = event_from_exception((self.exception_type, self.value, self.traceback))
hub.capture_event(event, hint=hint)
hub.flush()

View file

@ -777,10 +777,14 @@ class CuraApplication(QtApplication):
lib_suffixes = {""}
for suffix in lib_suffixes:
self._plugin_registry.addPluginLocation(os.path.join(QtApplication.getInstallPrefix(), "lib" + suffix, "cura"))
if not hasattr(sys, "frozen"):
self._plugin_registry.addPluginLocation(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "plugins"))
self._plugin_registry.preloaded_plugins.append("ConsoleLogger")
# Since it's possible to get crashes in code before the sentrylogger is loaded, we want to start this plugin
# as quickly as possible, as we might get unsolvable crash reports without it.
self._plugin_registry.preloaded_plugins.append("SentryLogger")
self._plugin_registry.loadPlugins()
if self.getBackend() is None:

View file

@ -11,7 +11,6 @@ try:
except ImportError:
pass
from typing import Optional
import os
class SentryLogger(LogOutput):