Я работаю над асинхронным ведением журнала для приложения django, где использую задачу сельдерея для задержки логики.
Я установил задание на основе класса сельдерея.
class AsyncLogging(Task):
ignore_result = True
name = 'cx_plan.tasks.logging_async'
def run(self, message):
co_class, co_funcname, f_lineno = self.find_caller()
logger = logging.getLogger(__name__)
logger.info("[{} - {}:{}] - {}".format(co_class.__name__, co_funcname, f_lineno, message))
def find_caller(self):
stack = inspect.stack()
return stack[2][0].f_locals["self"].__class__, stack[2][0].f_code.co_name, stack[2][0].f_lineno
app.register_task(AsyncLogging())
При звонке на номер:
AsyncLogging().run("Message is in correct format: dict")
Я могу найти правильный номер стека для исходного источника, но при использовании .delay вместо .run это больше не то, что ожидалось, поскольку используется задержка , но проблема в том, что за пределами этой асинхронной задачи нет трассировки стека.
Трассировка стека от .delay:
[INFO] - [cx_plan.tasks] - <class 'cx_plan.tasks.AsyncLogging'> find_caller 150
celery_1 | [INFO] - [cx_plan.tasks] - <class 'cx_plan.tasks.AsyncLogging'> run 142
celery_1 | [INFO] - [cx_plan.tasks] - <class 'cx_plan.tasks.AsyncLogging'> __protected_call__ 648
Есть ли способ получить трассировку стека вне этой асинхронной задачи, чтобы получить необходимую информацию. Любая помощь будет принята с благодарностью. Спасибо