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