Python 中如何使用装饰器实现日志记录?

推荐答案

-- -------------------- ---- -------
------ ---------
------ -------

- ------
--------------------------------------- ------------------- - -------- - ------------- - -------------

--- --------------------
    ----------------------
    --- -------------- ----------
        ----------------------- --------------- ------- ---- ----- ------- ------- ----------
        ------ - ----------- ---------
        ----------------------- --------------- -------- ---- ------- ----------
        ------ ------
    ------ -------

- -----
--------------
--- ------ ---
    ------ - - -

- --
------ --

本题详细解读

1. 装饰器的作用

装饰器是Python中一种强大的工具,用于修改或扩展函数的行为。通过装饰器,我们可以在不修改原函数代码的情况下,为函数添加额外的功能,例如日志记录、性能测试、权限校验等。

2. 日志记录装饰器的实现

在上述代码中,我们定义了一个名为log_decorator的装饰器。这个装饰器的作用是在函数执行前后记录日志。

  • functools.wraps(func): 这个装饰器用于保留原函数的元信息(如函数名、文档字符串等),避免在使用装饰器后丢失这些信息。
  • wrapper(*args, **kwargs): 这是装饰器的内部函数,它接收任意数量的位置参数和关键字参数。在这个函数中,我们首先记录函数开始执行的日志,然后调用原函数并记录其返回值,最后返回原函数的结果。

3. 日志配置

我们使用logging.basicConfig来配置日志记录的基本设置:

  • level=logging.INFO: 设置日志级别为INFO,这意味着只有INFO级别及以上的日志会被记录。
  • format='%(asctime)s - %(name)s - %(levelname)s - %(message)s': 设置日志的格式,包括时间、日志名称、日志级别和日志消息。

4. 使用装饰器

通过在函数定义前添加@log_decorator,我们将log_decorator装饰器应用到add函数上。这样,每次调用add函数时,都会自动记录日志。

5. 测试

调用add(3, 5)时,日志记录器会输出类似以下的日志:

通过这种方式,我们可以轻松地为任何函数添加日志记录功能,而无需修改函数本身的代码。

纠错
反馈