如何记录Python崩溃?
我在树莓派上运行一个Python代码,这个代码应该是一直运行下去的。但是过了几个小时后,它就崩溃了。因为它是在远程机器上运行的,所以我看不到崩溃时的错误信息。
我该怎么把这个错误信息存到一个文件里,这样我就能知道问题出在哪里?在Linux系统中,这个过程是自动完成的吗?还是我需要写一个函数来在崩溃时导出错误信息?我该怎么做呢?
3 个回答
2
我自己尝试了很多方法,但都感觉怪怪的……直到我终于搞明白了!只需要在你的Python文件周围写上这段代码,一切就会正常运行!顺便说一下,我会把崩溃日志命名为CRASH-,后面跟上Python的时间(比如CRASH-1607012036.015824.txt)
try:
<your program here>
except Exception as e:
crash=["Error on line {}".format(sys.exc_info()[-1].tb_lineno),"\n",e]
print(crash)
timeX=str(time.time())
with open("monstergame/crashlogs/CRASH-"+timeX+".txt","w") as crashLog:
for i in crash:
i=str(i)
crashLog.write(i)
注意:这是Python 3的代码,不是Python 2
11
你可以有一个主函数,并在主函数崩溃时记录日志。
def main():
...
raise ValueError("Crashed because I'm a bad exception")
...
if __name__ == "__main__":
try:
main()
except Exception as e:
logger.exception("main crashed. Error: %s", e)
这样做更好,特别是如果你使用像 logstash 这样的工具,想在你的界面上看到错误信息和发生的时间。
感谢 Eric 对这个答案的改进。
10
如果你想把输出结果存到一个文件里,可以这样启动这个过程:
python script.py >> /logdir/script.py.log 2>&1