Я не уверен, что это сработает, но вы можете создать декоратор журналирования прямо перед обратным вызовом как таковым:
@callback(...)
@myLogger
def function(a, b, c):
pass
def myLogger(fn):
@wraps
def wrapper(*args, **kwargs)
code_info = fn.__code__
code_vars = fn.__code__.co_names ## There are many options here
## check fn.__code__.__dict__
## in repl
retval = fn(args, kwargs)
print(f"func: {fn.__name__}, args: {args}, kwargs: {kwargs}, retval: {retval}")
return retval
return wrapper
Выше приведен более или менее псудокод для функции декоратор, который может извлекать информацию из вызовов функций, украшенных ею. Он запрашивает объект кода из функции, оценивает функцию, печатает набор информации на терминал и возвращает результат, как обычно. Обратите внимание, что myLogger идет после обратного вызова, поскольку мы ожидаем составить функции следующим образом:
callback(myLogger(function(...)))