python logger 全局捕获异常/错误信息

2020-07-03  本文已影响0人  RedB

在Python开发中,我们经常需要用logger将日志写入到文件。我们通常也需要将控制台中见到的所有异常信息都写入到文件中,比如一个经典的异常如下:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

但是默认情况下,除非我们在try-except的except中调用logger手动记录,否则我们会惊讶地发现,异常信息Traceback只在控制台打印了,而日志文件中却没有。

这种情况下我们就需要用到sys.excepthook:每次有新的且未被捕获的exception的时候,sys.excepthook就会被调用。python允许我们重写这个方法,来实现我们自己对异常的处理。

代码如下:

import sys
import logging

logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

def handle_exception(exc_type, exc_value, exc_traceback):
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return
    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) # 重点

sys.excepthook = handle_exception # 重点

if __name__ == "__main__":
    raise RuntimeError("Test unhandled")

转自:https://stackoverflow.com/questions/6234405/logging-uncaught-exceptions-in-python/16993115#16993115
(部分文字引用自:http://www.zhangdongshengtech.com/article-detials/282

我不是程序员,我只是stackoverflow的搬运机~

上一篇 下一篇

猜你喜欢

热点阅读