使用日志记录 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 文件中。相反,我在终端收到错误消息。

【问题讨论】:

你可以使用tryexcept块,你尝试运行一些代码,万一出现异常你可以在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.日志(logging)

python之三方库日志

python日志添加功能,主要记录程序运行中的日志,统一收集并分析

Selenium+python自动化12+日志logging基本用法高级用法

仅在出现错误时创建 Python 日志文件(使用日志记录模块)

python日志的记录与保存