python 带参数的装饰器

2019-12-12 18:03:39 浏览数 (1)

from functools import wraps import logging

def logged(level, name=None, message=None): """ Add logging to a function. level is the logging level, name is the logger name, and message is the log message. If name and message aren't specified, they default to the function's module and name. """ def decorate(func): logname = name if name else func.module log = logging.getLogger(logname) logmsg = message if message else func.name

代码语言:javascript复制
    @wraps(func)
    def wrapper(*args, **kwargs):
        log.log(level, logmsg)
        return func(*args, **kwargs)
    return wrapper
return decorate

Example use

@logged(logging.DEBUG) def add(x, y): return x y

@logged(logging.CRITICAL, 'example') def spam(): print('Spam!'

0 人点赞