【问题标题】:Saving critical errors using logging Python使用日志记录 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?

标签: python exception logging


【解决方案1】:

如上所述,您可以使用以下内容记录将在终端中返回给您的任何错误:

import subprocess

a = subprocess.run(["python3","hello.py"], stdout=subprocess.PIPE)
print(a.stdout.decode('utf-8'))

获得输出后,您可以搜索错误并相应地记录您的实验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多