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

使用callWithLogger()在Python中实现函数调用日志的自动生成

发布时间:2024-01-17 23:29:40

在Python中,我们可以使用装饰器来实现函数调用日志的自动生成。装饰器是Python中一种特殊的函数,可以用于修改其他函数的行为。

下面是一个示例,演示如何使用callWithLogger()装饰器实现函数调用日志的自动生成:

import logging

# 创建一个日志记录器
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# 创建一个日志处理器
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)

# 创建一个日志格式化器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# 将处理器添加到日志记录器
logger.addHandler(handler)

# 定义一个装饰器函数
def callWithLogger(func):
    def wrapper(*args, **kwargs):
        # 记录函数的调用信息
        logger.info(f"Calling function {func.__name__} with args: {args}, kwargs: {kwargs}")

        # 调用原始函数
        result = func(*args, **kwargs)

        # 记录函数的返回值
        logger.info(f"Function {func.__name__} returned: {result}")

        # 返回原始函数的返回值
        return result

    return wrapper

# 使用装饰器来修饰目标函数
@callWithLogger()
def add(a, b):
    return a + b

# 调用被修饰的函数
result = add(1, 2)
print(result)

在此示例中,我们首先创建一个日志记录器,并设置其级别为INFO。然后创建一个处理器,用于将日志消息打印到控制台,并设置它的级别和格式。然后将处理器添加到日志记录器中。

接下来,我们定义了一个名为callWithLogger()的装饰器函数。该装饰器函数接受一个函数作为参数,并返回一个新的函数。新函数在调用目标函数之前和之后记录日志。

callWithLogger()装饰器内部的新函数中,我们使用日志记录器记录函数的调用信息和返回值。然后调用原始函数,并返回其结果。

最后,我们使用装饰器修饰了一个名为add()的函数,该函数将两个数相加并返回结果。当我们调用被修饰的函数时,装饰器将自动记录函数的调用信息和返回值,并将它们打印到控制台。

通过运行上述代码,将会得到以下输出:

2021-11-11 00:00:00,000 - __main__ - INFO - Calling function add with args: (1, 2), kwargs: {}
2021-11-11 00:00:00,000 - __main__ - INFO - Function add returned: 3
3

从输出中可以看出,装饰器成功地记录了函数的调用信息和返回值。你可以根据需要修改日志记录器的级别、处理器的级别和格式,以满足自己的需求。