python读取日志错误信息_python logger 全局捕获异常/错误信息

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

Traceback (most recent call last):

File "", line 1, in

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")

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