捕获全局异常,并且把异常信息打印到日志中

背景:工作中用到一些脚本,脚本把日志记录到文件中。新需求修改脚本后,难免引入一些异常,执行脚本会报错,但是日志文件中没有报错的详细信息,很难排查。

1、不使用sys.excepthook时,执行下面代码会抛出异常,日志文件example.log不会记录异常信息。

 

#coding:utf-8
import sys
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
def handle_exception(exc_type, exc_value, exc_traceback):
    """使用sys.excepthook捕获全局异常,并且把异常信息打印到日志中"""
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return
    logging.error("未捕获的异常:", exc_info=(exc_type, exc_value, exc_traceback))
#sys.excepthook = handle_exception # 全局捕获异常


a=3/0

 

2、使用sys.excepthook后,无论脚本哪一行代码抛出异常,日志文件example.log都会记录异常信息。

#coding:utf-8
import sys
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
def handle_exception(exc_type, exc_value, exc_traceback):
    """使用sys.excepthook捕获全局异常,并且把异常信息打印到日志中"""
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return
    logging.error("未捕获的异常:", exc_info=(exc_type, exc_value, exc_traceback))
sys.excepthook = handle_exception # 全局捕获异常


a=3/0

 

posted @ 2024-02-27 15:12  超级宝宝11  阅读(85)  评论(0编辑  收藏  举报