使用日志记录 Python 保存严重错误
Posted
技术标签:
【中文标题】使用日志记录 Python 保存严重错误【英文标题】:Saving critical errors using logging Python 【发布时间】:2022-01-22 02:00:07 【问题描述】:我做了一个小游戏作为我的学校项目,我想将严重错误保存到我使用日志记录模块创建的 .log 文件中,但我就是不知道如何记录它们。
日志配置:
logging.basicConfig(level=logging.DEBUG, filename='log.log', filemode='w', format='%(asctime)s - %(name)s:%(levelname)s: %(message)s')
我想做什么: 每次程序遇到无法处理的异常(如 TypeError 或 SyntaxError)时,都会保存在 log.log 文件中。然后程序将退出。但它通常只是关闭程序并在终端中打印错误,这不是故意的。
我试过用:
import sys
class ShutdownHandler(logging.Handler):
def emit(self, record):
logging.critical(record.msg)
logging.shutdown()
sys.exit(1)
logging.basicConfig(level=logging.DEBUG, filename='log.log', filemode='w', format='%(asctime)s - %(name)s:%(levelname)s: %(message)s')
但它没有将输出保存到 log.log 文件中。相反,我在终端收到错误消息。
【问题讨论】:
你可以使用try
,except
块,你尝试运行一些代码,万一出现异常你可以在except块中处理
@AtharvaGundawar 这不是我的意思。我想在日志文件中保存严重错误(那些关闭窗口的错误,如语法错误)。
您可以在subprocess
或类似包的帮助下使用另一个python文件运行目标文件并记录输出。
@AtharvaGundawar 我能否将日志从 2 个脚本保存到同一个文件,还是必须有额外的 crash.log?
【参考方案1】:
如上所述,您可以使用以下内容记录将在终端中返回给您的任何错误:
import subprocess
a = subprocess.run(["python3","hello.py"], stdout=subprocess.PIPE)
print(a.stdout.decode('utf-8'))
获得输出后,您可以搜索错误并相应地记录您的实验。
【讨论】:
以上是关于使用日志记录 Python 保存严重错误的主要内容,如果未能解决你的问题,请参考以下文章
python日志添加功能,主要记录程序运行中的日志,统一收集并分析
Selenium+python自动化12+日志logging基本用法高级用法