当出现一些硬件问题并且我的kivy应用程序崩溃时,我遇到了问题。例如在Android或iOS上。普通用户无法查看日志,也不能查看日志。
因此,当我的应用程序启动时,我想创建单独的进程,并以某种方式查看主应用程序的状态。如果它崩溃我想将错误日志发送到我的服务器。那么,最好的方法是什么?也许另一个过程是多余的,我可以用更简单的方式来做到这一点?我究竟能抓到崩溃日志?...谢谢!
答案 0 :(得分:3)
TLDR:使用Sentry
有不同类型的崩溃和不同类型的工具。
原生崩溃:通常是段错误,低级别崩溃,你无法真正做任何事情。这就是您在Play商店标签上看到的内容,原生崩溃/艺术。回溯没有跟你说话,因为你会看到你的Python解释器和所有其他线程的C跟踪。用户可以看到“应用程序XXX突然退出”或类似的东西。有一些工具可以在本机崩溃的情况下显示更好的消息,并将其发送到其他地方,但您的应用程序永远不会恢复。你可以用这些工具做的唯一事情是重新启动它。
Python崩溃:好消息,你可以抓住它们并拥有可理解的追溯。我建议你研究一下Sentry。它是开源的,您可以在服务器上安装哨兵,当您的应用程序发生不良事件时,您可以将完整的追溯发送到您的哨兵安装。非常有用。
与Kivy的整合也非常简单:
if __name__ == "__main__":
import traceback
from raven import Client
client = Client('requests+http://XXKEYXX@sentry.yourserver.com/sentry/1')
try:
YourApp().run()
except:
traceback.print_exc()
ident = client.get_ident(client.captureException())
print "Exception caught; reference is %s" % ident
不要忘记在Android中拥有INTERNET权限。如果没有互联网,它将在控制台上失败两次。但就是这样。
此外,您可能希望将其插入Kivy的ExceptionManager。如果异常发生在主循环中,那么您有可能捕获它而不退出应用程序(忽略异常)。请注意,如果你正在做一些重要的事情:D