CommonClient.py UI: log full traceback
This commit is contained in:
parent
9508a9afc6
commit
8ff01ca979
28
kvui.py
28
kvui.py
|
@ -2,6 +2,7 @@ import os
|
|||
import logging
|
||||
import typing
|
||||
import asyncio
|
||||
import sys
|
||||
|
||||
os.environ["KIVY_NO_CONSOLELOG"] = "1"
|
||||
os.environ["KIVY_NO_FILELOG"] = "1"
|
||||
|
@ -205,8 +206,25 @@ class GameManager(App):
|
|||
self.commandprocessor("/help")
|
||||
Clock.schedule_interval(self.update_texts, 1 / 30)
|
||||
self.container.add_widget(self.grid)
|
||||
self.catch_unhandled_exceptions()
|
||||
return self.container
|
||||
|
||||
def catch_unhandled_exceptions(self):
|
||||
"""Relay unhandled exceptions to UI logger."""
|
||||
if not getattr(sys.excepthook, "_wrapped", False): # skip if already modified
|
||||
orig_hook = sys.excepthook
|
||||
|
||||
def handle_exception(exc_type, exc_value, exc_traceback):
|
||||
if issubclass(exc_type, KeyboardInterrupt):
|
||||
sys.__excepthook__(exc_type, exc_value, exc_traceback)
|
||||
return
|
||||
logging.getLogger("Client").exception("Uncaught exception",
|
||||
exc_info=(exc_type, exc_value, exc_traceback))
|
||||
return orig_hook(exc_type, exc_value, exc_traceback)
|
||||
handle_exception._wrapped = True
|
||||
|
||||
sys.excepthook = handle_exception
|
||||
|
||||
def update_texts(self, dt):
|
||||
if self.ctx.server:
|
||||
self.title = self.base_title + " " + Utils.__version__ + \
|
||||
|
@ -287,7 +305,7 @@ class LogtoUI(logging.Handler):
|
|||
self.on_log = on_log
|
||||
|
||||
def handle(self, record: logging.LogRecord) -> None:
|
||||
self.on_log(record)
|
||||
self.on_log(self.format(record))
|
||||
|
||||
|
||||
class UILog(RecycleView):
|
||||
|
@ -299,8 +317,8 @@ class UILog(RecycleView):
|
|||
for logger in loggers_to_handle:
|
||||
logger.addHandler(LogtoUI(self.on_log))
|
||||
|
||||
def on_log(self, record: logging.LogRecord) -> None:
|
||||
self.data.append({"text": escape_markup(record.getMessage())})
|
||||
def on_log(self, record: str) -> None:
|
||||
self.data.append({"text": escape_markup(record)})
|
||||
|
||||
def on_message_markup(self, text):
|
||||
self.data.append({"text": text})
|
||||
|
@ -310,8 +328,8 @@ class E(ExceptionHandler):
|
|||
logger = logging.getLogger("Client")
|
||||
|
||||
def handle_exception(self, inst):
|
||||
self.logger.exception(inst)
|
||||
return ExceptionManager.RAISE
|
||||
self.logger.exception("Uncaught Exception:", exc_info=inst)
|
||||
return ExceptionManager.PASS
|
||||
|
||||
|
||||
class KivyJSONtoTextParser(JSONtoTextParser):
|
||||
|
|
Loading…
Reference in New Issue