利用装饰器实现Python函数的日志记录
发布时间:2023-12-15 14:40:48
装饰器是Python中非常强大的特性之一,它可以用于在不修改被装饰函数代码的情况下,为函数添加新的功能。其中一个常见的应用就是在函数执行前后进行日志记录。
下面我们来实现一个简单的装饰器,用于为函数添加日志记录功能,并提供一个使用例子。
import logging
# 创建日志记录器
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 创建文件处理器,用于将日志写入文件
file_handler = logging.FileHandler('log.txt')
file_handler.setLevel(logging.INFO)
# 创建格式化器,定义日志消息的格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
# 将文件处理器添加到日志记录器中
logger.addHandler(file_handler)
# 定义一个装饰器函数,用于为被装饰函数添加日志记录功能
def log_decorator(func):
def wrapper(*args, **kwargs):
logger.info(f'{func.__name__}函数被调用')
result = func(*args, **kwargs)
logger.info(f'{func.__name__}函数执行完毕')
return result
return wrapper
# 使用装饰器为函数添加日志记录功能
@log_decorator
def add(x, y):
return x + y
# 调用被装饰函数
result = add(1, 2)
print(result)
在上面的代码中,我们首先导入了logging模块,创建了一个日志记录器logger,并设置了日志级别为INFO。然后我们创建了一个文件处理器file_handler,用于将日志写入文件,并设置了日志级别为INFO。之后我们创建了一个格式化器formatter,用于定义日志消息的格式,并将该格式化器添加到文件处理器中。最后将文件处理器添加到日志记录器中。
接着我们定义了一个装饰器函数log_decorator,该函数接受一个函数作为参数,并返回一个新的函数wrapper。在wrapper函数中,我们首先使用日志记录器logger记录被装饰函数的调用消息,然后调用被装饰函数,并将结果保存到result变量中,最后再使用日志记录器记录被装饰函数执行完毕的消息,并返回结果。
最后我们使用装饰器@log_decorator将add函数进行装饰,当我们调用add函数时,装饰器会自动为add函数添加日志记录功能。在调用被装饰的add函数后,我们可以通过日志文件log.txt查看日志记录的内容。
以上就是利用装饰器实现Python函数的日志记录的方法和一个使用例子。通过使用装饰器,我们可以在不修改被装饰函数的情况下方便地为函数添加日志记录功能,提高了代码的可维护性和可扩展性。
