Python当前版本是否有内置方法调用记录装饰器?
Python方法调用记录方案及内置支持情况
以下代码(或基于inspect模块的自定义方案)可用于记录方法调用:
import logging, sys logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) logger = logging.getLogger() def log(func): def logged(*args, **kwargs): logger.info(f"{func.__name__} starting with {args=} {kwargs=}...") result = func(*args, **kwargs) logger.info(f"{func.__name__} finished.") return result return logged class A: @log def foo(self, x, y): pass @log def bar(self, x, y): 1/0 a = A() a.foo(2, y=3) a.bar(2, y=3)
运行后输出示例:
INFO:root:foo starting with args=(<__main__.A object at 0x0000000002784EE0>, 2) kwargs={'y': 3}... INFO:root:foo finished. INFO:root:bar starting with args=(<__main__.A object at 0x0000000002784EE0>, 2) kwargs={'y': 3}... ...
当前Python的内置解决方案情况
Python标准库中没有专门用于自动记录方法调用的开箱即用工具,无论是logging模块还是其他核心模块,都没有提供直接实现这种方法调用日志的内置装饰器或功能。
不过可以借助标准库中的工具组合实现更完善的效果:
logging模块作为日志输出基础,负责日志的格式化、输出渠道管理;inspect模块可精细获取方法参数信息,比如区分位置参数与关键字参数、过滤实例self参数,优化日志内容;functools.wraps可保留原函数元信息,让日志中的函数名、文档字符串等更准确。
如果需要更成熟的实现,通常需要自行编写装饰器,或使用第三方库简化开发。
内容的提问来源于stack exchange,提问作者Basj
相关产品推荐
相关产品推荐

