使用python的日志记录模块记录所有的异常和错误

新手上路,请多包涵

我想检查特定后台文件中的错误,但标准错误流由前台程序控制,问题文件中的错误未显示。不过,我可以使用 logging 模块并将输出写入文件。我想知道如何使用它来记录所有异常、错误及其回溯。

原文由 abc def foo bar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 597
2 个回答

记录程序中抛出的 任何 异常可能不是一个好主意,因为 Python 也将异常用于正常的控制流。

因此,您应该只记录 未捕获 的异常。一旦你有一个异常对象,你可以使用记录器的 exception() 方法 轻松地做到这一点。

要处理所有未捕获的异常,您可以将脚本的入口点包装在 try...except 块中,或者通过重新分配安装自定义异常处理程序 sys.excepthook()

 import logging
import sys

logger = logging.getLogger('mylogger')
# Configure logger to write to a file...

def my_handler(type, value, tb):
    logger.exception("Uncaught exception: {0}".format(str(value)))

# Install exception handler
sys.excepthook = my_handler

# Run your main script here:
if __name__ == '__main__':
    main()

原文由 Ferdinand Beyer 发布,翻译遵循 CC BY-SA 3.0 许可协议

import sys
import logging
import traceback

# log uncaught exceptions
def log_exceptions(type, value, tb):
    for line in traceback.TracebackException(type, value, tb).format(chain=True):
        logging.exception(line)
    logging.exception(value)

    sys.__excepthook__(type, value, tb) # calls default excepthook

sys.excepthook = log_exceptions

原文由 JeffCharter 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题