欢迎访问宙启技术站
智能推送

使用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装饰器装饰了addmultiply函数。当我们调用这些函数时,它们的调用和返回信息将会被打印到日志中。

例如,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

通过这种方式,我们可以跟踪函数的调用以及返回结果,以便于调试和日志记录。