使用callWithLogger()在Python中实现函数调用的日志跟踪
发布时间:2024-01-17 23:26:40
在Python中,我们可以使用装饰器来实现函数调用的日志跟踪。装饰器是一个可以修改其他函数功能的函数,它可以在不修改原始函数的情况下添加额外的功能。
我们可以定义一个名为callWithLogger的装饰器,它将在函数调用时打印日志信息。下面是一个示例实现:
import functools
import logging
def callWithLogger(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
logging.info(f"Calling {func.__name__} with args: {args}, kwargs: {kwargs}")
result = func(*args, **kwargs)
logging.info(f"{func.__name__} returned {result}")
return result
return wrapper
上述代码中,我们使用了functools.wraps装饰器来确保被装饰的函数的__name__等属性保持不变。在装饰器函数中,我们使用logging模块来打印日志信息。我们首先打印调用函数的名称和参数,然后调用原始函数并获取返回值,最后打印函数返回的结果。
以下是示例函数的使用案例:
import logging
# 配置日志输出到控制台
logging.basicConfig(level=logging.INFO)
# 应用装饰器
@callWithLogger
def add(a, b):
return a + b
@callWithLogger
def multiply(a, b):
return a * b
# 调用被装饰的函数
result1 = add(2, 3)
result2 = multiply(4, 5)
print(result1) # 输出:5
print(result2) # 输出:20
在上述示例中,我们首先使用logging.basicConfig配置了日志输出到控制台。然后,我们使用callWithLogger装饰器装饰了add和multiply函数。当我们调用这些函数时,它们的调用和返回信息将会被打印到日志中。
例如,add(2, 3)将会打印如下日志信息:
INFO:root:Calling add with args: (2, 3), kwargs: {}
INFO:root:add returned 5
同样地,multiply(4, 5)将会打印如下日志信息:
INFO:root:Calling multiply with args: (4, 5), kwargs: {}
INFO:root:multiply returned 20
通过这种方式,我们可以跟踪函数的调用以及返回结果,以便于调试和日志记录。
