python 装饰器log
时间: 2023-06-29 21:10:36 浏览: 98
以下是一个简单的装饰器实现log功能的例子:
```python
import functools
def logger(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with args={args} and kwargs={kwargs}")
return func(*args, **kwargs)
return wrapper
```
上面的代码定义了一个装饰器`logger`,它接受一个函数作为参数,并返回一个新的函数`wrapper`。`wrapper`函数会在执行原函数之前,打印出函数名和参数。然后调用原函数,并返回原函数的返回值。
使用这个装饰器非常简单,只需要在需要添加log的函数上加上`@logger`装饰器即可:
```python
@logger
def add(a, b):
return a + b
add(1, 2) # 执行 add 函数,并输出 "Calling add with args=(1, 2) and kwargs={}"
# 输出结果:3
```
这样就可以方便地为多个函数添加log功能了。
相关问题
python log装饰器
日志(log)是在软件开发过程中非常重要的一环,它可以帮助开发者追踪程序的运行状态和问题。在Python中,可以使用装饰器(decorator)来实现日志功能,这样可以使日志代码与业务代码分离,提高代码的可维护性。
下面是一个简单的日志装饰器示例代码:
```
import logging
def log(func):
def wrapper(*args, **kwargs):
logging.basicConfig(filename='log.txt', level=logging.INFO)
logging.info('Function %s() is called with args: %s, kwargs: %s', func.__name__, args, kwargs)
return func(*args, **kwargs)
return wrapper
```
在这个示例中,定义了一个名为log的装饰器函数,它接受一个函数作为参数,并返回一个新的函数wrapper。wrapper函数中首先配置了日志文件名和日志级别,然后使用logging.info方法记录日志信息,包括函数名、参数和关键字参数。最后,wrapper函数调用原始函数并返回其结果。
使用这个日志装饰器很简单,只需要在需要记录日志的函数前加上@log即可,例如:
```
@log
def foo(x, y):
return x + y
print(foo(1, 2))
```
当运行这段代码时,将在当前目录下生成一个名为log.txt的日志文件,其中包含了函数foo的调用信息。
希望这个示例可以帮助您理解如何使用装饰器实现日志功能。当然,这只是一个简单的示例,实际应用中可能需要更复杂的日志记录方式和日志级别控制。
python装饰器语法
Python 装饰器的语法如下:
```
@decorator_function
def target_function():
# function body
```
其中,`decorator_function` 是装饰器函数,它可以是任何可调用对象,它的返回值通常是一个新的函数或类。`target_function` 是被装饰的函数或类名。
装饰器函数可以在函数定义之前或之后定义,它们需要接受一个函数作为参数,并返回一个新的函数。装饰器可以被链式使用,一个函数可以被多个装饰器修饰。
例如,下面是一个简单的装饰器函数,它用于在函数执行前打印一条日志信息:
```
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} function")
return func(*args, **kwargs)
return wrapper
@log_decorator
def my_function():
print("Hello, world!")
```
在上面的例子中,`log_decorator` 是一个装饰器函数,它接受一个函数作为参数,并返回一个新的函数 `wrapper`。`wrapper` 函数打印一条日志信息,然后调用原始函数 `my_function`。通过在函数定义之前添加 `@log_decorator`,我们将 `my_function` 装饰成了一个新的函数,它在执行前会打印一条日志信息。
阅读全文