首页 > 编程语言 >python 日志装饰器@logexecution 用法及案例

python 日志装饰器@logexecution 用法及案例

时间:2024-12-20 14:55:30浏览次数:5  
标签:logging 函数 python xx 日志 logexecution 装饰 divide

在Python中,日志装饰器(@logexecution)是一种用于在函数或方法执行前后自动记录日志的装饰器。这种装饰器对于调试、监控和审计代码执行非常有用。下面是一个简单的日志装饰器的实现及其用法案例:

日志装饰器实现

import logging
import functools

# 配置日志记录器(可选,但通常建议这样做)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def logexecution(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        logging.info(f"Executing function '{func.__name__}' with arguments {args} {kwargs}")
        result = func(*args, **kwargs)
        logging.info(f"Function '{func.__name__}' executed successfully")
        return result
    return wrapper

用法案例

@logexecution
def divide(a, b):
    if b == 0:
        raise ValueError("Cannot divide by zero!")
    return a / b

# 调用函数
try:
    result = divide(10, 2)
    print(f"Result: {result}")
except ValueError as e:
    logging.error(e)

# 尝试除以零以触发异常
try:
    result = divide(10, 0)
except ValueError as e:
    logging.error(e)

输出结果

2023-xx-xx xx:xx:xx,xxx - INFO - Executing function 'divide' with arguments (10, 2) {}
Result: 5.0
2023-xx-xx xx:xx:xx,xxx - INFO - Function 'divide' executed successfully
2023-xx-xx xx:xx:xx,xxx - ERROR - Cannot divide by zero!

解释

  1. 装饰器定义logexecution 是一个装饰器函数,它接受一个函数 func 作为参数,并返回一个新的函数 wrapper
  2. @functools.wraps:使用 wraps 来保持被装饰函数的元数据(如函数名和文档字符串)。
  3. 记录日志:在 wrapper 函数内部,使用 logging.info 在函数执行前后记录日志。
  4. 异常处理:在调用被装饰函数时,如果发生异常,它将被正常抛出,并且可以在调用者处被捕获和处理。在这个例子中,我们捕获了 ValueError 并记录了错误日志。
  5. 返回结果:返回被装饰函数的执行结果。

注意事项

  • 日志装饰器对于任何可调用对象都适用,包括函数、方法和类方法。
  • 日志级别(如 INFODEBUGWARNINGERROR 等)可以根据需要进行调整。
  • 如果你的函数接受可变数量的参数(包括位置参数、关键字参数、默认参数等),装饰器应该能够正确处理这些参数(上面的 *args 和 **kwargs 确保了这一点)。
  • 在实际应用中,你可能希望将日志配置(如日志文件名、日志级别、日志格式等)放在一个单独的配置文件中,而不是直接在代码中硬编码。

标签:logging,函数,python,xx,日志,logexecution,装饰,divide
From: https://www.cnblogs.com/wyj497022944/p/18619280

相关文章

  • python 重试装饰器@retryonexception 用法及案例
    在Python中,重试装饰器(@retryonexception)是一种用于在函数或方法执行过程中遇到异常时自动重试的装饰器。这种装饰器对于处理可能由于临时问题(如网络延迟、资源争用等)而失败的操作非常有用。下面是一个简单的重试装饰器的实现及其用法案例:重试装饰器实现importtimeimportfunct......
  • python类中 __开头的函数【魔法方法】
    在Python中,魔法方法(MagicMethods)或双下划线方法(DunderMethods)是一类特殊的方法,它们以双下划线(__)开头和结尾。这些方法为对象提供了丰富的功能,允许你定义对象的内置操作行为,如初始化、比较、表示、数学运算等。以下是一些常见的魔法方法及其用途,并附有相应的示例代码。1.初始......
  • python学习——与时间日期相关的方法
    文章目录类方法例子不用考虑闰年了!Python中处理日期和时间的功能主要依赖于datetime模块。类datetime.date:表示日期(年、月、日)的类。datetime.time:表示时间(小时、分钟、秒、微秒)的类。datetime.datetime:表示日期和时间的组合。datetime.timedelta:表......
  • python毕设 基于web的养宠系统的实现程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于宠物管理系统的研究,现有研究主要以宠物领养、销售等传统功能为主。专门针对基于web的综合性养宠系统,涵盖宠物帮遛、遛宠信息等功......
  • 修改python jsonpickle源码, 实现不序列化对象私有成员(3)
    发现之前修改源码后,虽然过滤掉对象的私有成员,但是反序列化的时候,发现生成的对象只有只有公有成员,不包括私有成员.这不是我想要的,因为没有私有成员,对象就不完整了,并且有时候还需要一些私有成员的默认值.所以,还需要再优化一下.修改unpickler.py文件的def_restor......
  • Python旅游信息管理系统v7c4w(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍旅游信息管理系统的现状来进行开发的,具体根据现实的需求来实现旅游信息管理系统网络......
  • Python古玩玉器藏品交易系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍实现了一个古玩玉器交易系统。古玩玉器交易系统的主要用户分为用户、管理员。管理员......
  • python 多版本安装
    当不同的项目需要不同的python版本时,需要安装多个版本的python1.官网下载所有需要的版本:以windows为例:https://www.python.org/downloads/windows/2.安装不同的版本,注意安装路径,默认路径为:C:\Users\Administrator\AppData\Local\Programs\Python......
  • 系统日志调试
    本文内容转载:https://www.landui.com/docs-4639为防掉失复制一份为应用程序池“XXX”提供服务的进程在与WindowsProcessActivationService通信时出现严重错误。该进程ID为“XXXX”。数据字段包含错误号。症状   日志中大量报错,IIS严重错误,此类错误默认情况下5......
  • python及pip及pycharm安装
    参考:https://blog.csdn.net/wslejbb/article/details/1379211231、下载pythonhttps://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz2、安装pythonmkdir/usr/local/python3tar-xfPython-3.6.1.tgzcdPython-3.6.1/./configure--prefix=/usr/local/python3make&......