我正試圖編寫一個簡單的裝飾器,在調用裝飾函數之前記錄給定的語句。記錄的語句應該都來自同一個函數,我認爲這是functools.wraps()的目的。與記錄裝飾器一起使用functools.wraps
爲什麼下面的代碼:
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(funcName)20s - %(message)s')
from functools import wraps
def log_and_call(statement):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
logging.info(statement)
return func(*args, **kwargs)
return wrapper
return decorator
@log_and_call("This should be logged by 'decorated_function'")
def decorated_function():
logging.info('I ran')
decorated_function()
結果像日誌語句:
wrapper - This should be logged by 'decorated_function'
decorated_function - I ran
我想調用包裝將重命名decorated_function的名字包裝。
我正在使用python 2.7.1。
有沒有辦法在沒有通過聲明的情況下做同樣的事情。意味着我只想在我的代碼中使用logger.info('test {}',123),但它會自動附加一個額外的字典。現在我用你的想法。像def log_and_call(語句,級別):....和def test(st,level):@log_and_call()def api():傳遞api()。並使用像logger.debug('測試{}'。格式(123),'調試')。它的工作在那裏有更好的方法。 – Jisson