Я думаю, что вы ищете не декоратор отладки, а декоратор журналирования.
Возможно, имеет смысл использовать Модуль ведения журналов Python , чтобы вы могли иметь более точный контроль над самой регистрацией. Например, вы сможете выводить в файл для последующего анализа вывода.
Тогда декоратор может выглядеть примерно так:
import logging
logger = logging.getLogger('TraceLog')
# TODO configure logger to write to file/stdout etc, it's level etc
def logthis(level):
def _decorator(fn):
def _decorated(*arg,**kwargs):
logger.log(level, "calling '%s'(%r,%r)", fn.func_name, arg, kwargs)
ret=fn(*arg,**kwargs)
logger.log(level, "called '%s'(%r,%r) got return value: %r", fn.func_name, arg, kwargs, ret)
return ret
return _decorated
return _decorator
@logthis(logging.INFO)
def myfunc(this,that):
return this+that
Тогда, если вы сконфигурируете регистратор для вывода в stderr, вы увидите:
>>> logger.setLevel(logging.INFO)
>>> handler=logging.StreamHandler()
>>> logger.addHandler(handler)
>>> myfunc(1,2)
calling 'myfunc'((1, 2),{})
called 'myfunc'((1, 2),{}) got return value: 3