首页 > 编程语言 >Python问题异常处理与日志结合

Python问题异常处理与日志结合

时间:2024-03-24 21:33:11浏览次数:37  
标签:logging Python except handler 记录器 日志 异常 logger

我们掌握了try-except来处理程序运行中可能遇到的异常,以及使用logging来记录程序运行日志,该篇文章就结合二者来讲讲如何记录程序运行过程中的各种事件、状态信息以及遇到的异常情况,以便于追踪、诊断和解决程序运行时的问题。

目录

一、配置日志记录器 (logging.Logger)

二、 使用日志记录器记录信息

三、异常处理与日志记录


一、配置日志记录器 (logging.Logger)

首先,创建一个日志记录器实例,并根据需要配置其级别、输出格式、过滤规则等属性。常用的日志级别包括(由低到高):DEBUGINFOWARNINGERRORCRITICAL。日志格式可以自定义,通常包含时间戳、日志级别、源模块名、进程/线程ID、以及具体的消息内容。

import logging
import time
#创建一个日志记录器
logger=logging.getLogger(__name__)
logger.setLevel(logging.DEBUG) #设置日志记录器的最低输出级别为DEBUG

#设置日志格式
formatter=logging.Formatter("%(asctime)s - %(name)s - %(levelname)s -%(modulename)s - %(message)s")
datefmt="%Y-%m-%d %H:%M:%S"

#添加日志处理器,控制台、文件
#控制台日志
stream_handler=logging.StreamHandler() #输出到控制台
stream_handler.setFormatter(formatter) #设置日志格式
stream_handler.setLevel(logging.INFO) #单独设置控制台的输出级别为INFO

#文件日志
file_handler = logging.FileHandler(filename=f"{time.strftime('%Y-%m-%d')}_app.log", encoding='utf-8') #输出到文件、文件名格式为:年-月-日_LOG.log
file_handler.setFormatter(formatter)#设置日志格式
file_handler.setLevel(logging.DEBUG)#单独设置文件日志的输出级别为DEBUG

#添加日志处理器
logger.addHandler(stream_handler)
logger.addHandler(file_handler)

二、 使用日志记录器记录信息

在代码中,根据需要在适当的位置调用日志记录器的方法来记录不同级别的信息。这有助于跟踪程序执行流程、记录关键决策点、参数值、中间结果等。

def complex_computation(item):
    # 一个可能出现错误的复杂计算过程
    if item=='error':
        raise ValueError("Divide by zero error!")
    return item/2
def process_data(data):
    logger.debug(f"Function called with param: {data}")
    try:
        # 执行可能会出错的操作
        if not isinstance(data,list):
            raise ValueError("data must be a list")
        for item in data:
            #假设某个计算过程可能出错
            result=complex_computation(item)
            print(result)
    except ValueError as ve:
        #记录异常信息
        logger.error(f"ValueError: {ve}")
    except Exception as e:
        #记录未知异常信息
        logger.exception(f"Exception: {e}")

三、异常处理与日志记录

在可能出现异常的地方使用 try-except 结构捕获异常,并在 except 块中使用日志记录异常信息。这样,即使程序因异常而中断,也能确保异常的相关细节被记录下来,便于后续分析。

try:
    process_data([1,2,3,'error',4,5])
except Exception as e:
    logging.critical(f'Critical failure during processing: {e}',exc_info=True)
    #处理全局异常,或者直接让程序退出except ValueError as ve:
    logger.warning(f"ValueError caught: {ve}")
    # 处理或恢复操作
except SomeCustomException as sce:
    logger.error(f"Custom exception encountered: {sce}", extra={'context': additional_info})
    # 特定异常处理
except Exception as e:
    logger.critical("Unexpected error occurred:", exc_info=True)
    # 发送报警通知、保存现场数据等

标签:logging,Python,except,handler,记录器,日志,异常,logger
From: https://blog.csdn.net/qq_52758588/article/details/136994517

相关文章

  • 10个超实用的Python模板
    From: https://mp.weixin.qq.com/s/MCQIDYEXsp2v7RRsLaJ4JA-------------------------------------------------------------------------------------以下是10个超实用的Python模板,可以帮助您更快速地开始编写不同类型的代码:1.简单脚本模板:#!/usr/bin/env pythondef main......
  • 【进阶五】Python实现SDVRP(需求拆分)常见求解算法——自适应大邻域算法(ALNS)
    基于python语言,采用经典自适应大邻域算法(ALNS)对需求拆分车辆路径规划问题(SDVRP)进行求解。目录往期优质资源1.适用场景2.代码调整3.求解结果4.代码片段参考往期优质资源经过一年多的创作,目前已经成熟的代码列举如下,如有需求可私信联系,表明需要的问题与算法......
  • 如何使用Python编写网络程序来控制和交互物联网设备
    要使用Python编写网络程序来控制和交互物联网设备,你需要遵循以下步骤:选择合适的物联网设备:首先,你需要确定你想控制的物联网设备类型,例如智能灯泡、智能插座、温度传感器等,并了解其支持的通信协议(如MQTT,HTTP,CoAP等)。准备开发环境:确保你的计算机上安装了Python。根......
  • python案例
    1.针对数值运算符水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。例如:1^3+5^3+3^3=153。#水仙花数#方法一:foriinrange(100,1000):a=i//100b=(i-a*100)//10c=(i-a*100-b*10)ifi==pow(a,3)+......
  • python自动化——web自动化框架常用封装代码复习——当你会开发之后,发现一切都是如此
    PS:  PO模式知识点如下: 1、知识点:函数的书写、类、继承,模块导入; 2、思路:分层,抽离;     =====================================================================          编写用例基础版本:   pytest参数化,以及原始selenium用例编......
  • python安装教程
    打开国内的镜像网站Indexofpython-local/3.12.2(huaweicloud.com)找到如下图的程序下载即可。比官网的要快【我下载的是12.2的版本,你也可以根据自己的需求选择不同的版本】 下载完成之后就是安装了2.1双击下载的程序,出现如下界面 我们选择自定义安装路径2.2......
  • python趣味编程-使用 Django 和 WebSockets 的 Python 简单实时聊天室网站
    在Python中使用Django的简单实时聊天室系统该项目名为“简单实时聊天室系统”。这是一个使用Python和DjangoFramework开发的基于Web的应用程序。该应用程序是一个供随机用户使用的简单聊天室。所有人都可以在一个聊天框或对话框中进行交流。聊天消息会自动更新到所......
  • python趣味编程-使用 Django 的 Python 大学考勤管理系统
    在Python中使用Django的大学考勤管理系统该项目的名称为《大学考勤管理系统》。这是一个使用DjangoFramework用Python开发的基于Web的应用程序。该项目帮助某些大学学院存储/记录和管理学生每堂课的出勤情况。使用该应用程序,他们可以轻松列出班级学生名单并记录每......
  • python reqeusts 请求时headers指定content length后 请求不响应
    解释:HTTP头部中的Content-Length字段表示请求体的大小,用字节来表示。当你在使用Python的requests库进行请求时,如果你手动设置了Content-Length,但实际发送的请求体大小与Content-Length头部声明的大小不一致,服务器可能会认为这是一个无效的请求或者导致连接超时,因此服务器不会响应......
  • net core API 后台系统操作日志的实现思路
    netcoreAPI后台系统操作日志的实现思路系统操作日志的实现思路主要问题不在于写日志和表结构设计上。主要问题在识别出哪些数据做了修改。并生成日志。表中数据列众多,且要监控多个表。如果要监控的每个表都去写代码去监控和转换这样的工作量就会比较大。如,用户表【Name,......