首页 > 其他分享 >捕获全局异常,并且把异常信息打印到日志中

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

时间:2024-02-27 15:24:58浏览次数:20  
标签:logging exc type 捕获 sys excepthook 日志 异常

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

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

 

标签:logging,exc,type,捕获,sys,excepthook,日志,异常
From: https://www.cnblogs.com/superbaby11/p/18036930

相关文章

  • 弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
    作者:潘伟龙(豁朗)背景日志服务SLS是云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务,基于日志服务的便捷的数据接入能力,可以将系统日志、业务日志等接入SLS进行存储、分析;阿里云Flink是阿里云基于ApacheFlink构建的大数据分析平台......
  • C#程序全局异常处理—WPF和Web API两种模式
    C#程序的全局异常处理,网上搜下资料都是一大堆,我这里最近也是独立做一个B/S结构的小项目,后面又增加了需求用WPF实现相同的功能,这里将我所使用的全局异常处理方式做一个简短的总结分享。WebAPI项目的全局异常处理这种项目下,我们可以直接自定义一个全局异常的过滤器,用来处理全局......
  • NLog条件配置——实现将包含某个特定字符串日志写入指定文件
    需求产生缘由在开发中为了了解程序在运行的内存状态并记录下来,以便出问题时判断是不是与内存相关。于是实时采集了开发程序需要的内存信息。但采集的内存信息在存储时,以NLog中的Trace级别来存储的话,会与程序其它Trace级别的日志都记录在相同的TraceLog文件下,这会导致在查看内存......
  • J-link虚拟串口波特率异常问题
    J-LINKV9以上自带了虚拟串口,使用非常方便。但最近遇到问题,发现打开虚拟串口时电脑接收到的是乱码。到官网搜索了一下,发现最高波特率是115200,我使用的是256000,于是降低波特率。官网说明:[已解决]J-LinkVCOM最特率。-J-Link/Flasher相关-SEGGER-论坛再测试,发现经常接收不......
  • 在K8S中,如何查看Pod中某个容器日志?
    在Kubernetes(K8s)中,若要查看Pod中某个容器的日志,可以使用kubectllogs命令,并通过-c或--container参数指定容器名称。以下是命令格式:kubectllogs<pod_name>-c<container_name>这里的<pod_name>是你想要查看日志的Pod名称,而<container_name>则是你具体想要......
  • 日志解析对照表整理
         ......
  • FastAPI中全局异常处理
    装饰器版本自定义异常1.首先我们定义三个文件,分别为exception.py,main.py,user.py2.自定义异常需要继承HTTPException,该异常可以从fastapi中直接导入fromfastapiimportHTTPException3.exception.py中定义我们业务模块的异常fromfastapiimportHTTPExceptionclassUs......
  • 第八章 异常控制流
    1.异常从给处理器加电开始,直到你断电为止程序计数器假设一个值的序列(\(a_k\)是\(I_k\)的地址)每次从\(a_k到a_{k+1}\)的过渡称为控制转移,这样的控制转移称为处理器的控制流系统必须对系统状态的变化(\(I_k和I_{k+1}\)的地址不相邻)做出反应,这些变化不是一些必要的机制(比如......
  • ELKF日志系统搭建(二)进阶——使用 Kafka 作为日志消息缓存
    说明:在一些比较大的业务使用场景中,因为应用繁多,需要收集的日志也很多,通过filebeat或者logstash收集上来的日志如果全都直接发送给ES,那么就会对ES集群产生一定的压力,为了避免出现日志接收不过来的问题,于是引入了消息队列作为缓存,比如常见的使用Redis或Kafka作为消息缓存......
  • 简化 Python 日志管理:Loguru 入门指南
    简化Python日志管理:Loguru入门指南在开发和维护软件项目时,高效的日志管理系统对于监控应用程序的行为、调试代码和追踪异常至关重要。Python的标准日志模块虽然功能强大,但其配置和使用往往较为复杂,尤其是对于新手开发者。这就是Loguru库发挥作用的地方,它以极简的方式重新定......