Celery / Django - 如何将现有功能变成任务并处理现有日志记录
Celery / Django - How to make existing function into a task and handle existing logging
这是我的场景。我的 Django 项目中有一些这样的函数:
import logging
logger = logging.getLogger('farm')
def _move_horse(horse_id, attachment=None):
if attachment:
logger.info(...)
#other_stuff
else:
logger.info(...)
other_func() # contains more logging
def move_horse_to_field(horse_id):
_move_horse(horse_id)
def move_horse_to_field_w_attachment(horse_id, attachment):
_move_horse(horse_id, attachment)
那我想把这个设为后台任务:
@shared_task(bind=True)
def move_horse_to_field(self, horse_id):
_move_horse(horse_id)
但是,如何使被调用函数中的日志记录在从后台任务调用时和正常情况下都能正常工作?
经过一段时间的使用和尝试不同的东西后,似乎就像设置这个选项一样简单:
CELERYD_HIJACK_ROOT_LOGGER = 假
一旦我这样做了,芹菜工人似乎尊重我所有现有的日志设置。他们写入 Django 应用程序所用的同一个文件,甚至在我记录错误级别消息(我有一个日志设置)时他们甚至发送电子邮件。在我的情况下,这正是我想要的。
而且我似乎根本不必为 get_task_logger(name) 而烦恼。
这是我的场景。我的 Django 项目中有一些这样的函数:
import logging
logger = logging.getLogger('farm')
def _move_horse(horse_id, attachment=None):
if attachment:
logger.info(...)
#other_stuff
else:
logger.info(...)
other_func() # contains more logging
def move_horse_to_field(horse_id):
_move_horse(horse_id)
def move_horse_to_field_w_attachment(horse_id, attachment):
_move_horse(horse_id, attachment)
那我想把这个设为后台任务:
@shared_task(bind=True)
def move_horse_to_field(self, horse_id):
_move_horse(horse_id)
但是,如何使被调用函数中的日志记录在从后台任务调用时和正常情况下都能正常工作?
经过一段时间的使用和尝试不同的东西后,似乎就像设置这个选项一样简单:
CELERYD_HIJACK_ROOT_LOGGER = 假
一旦我这样做了,芹菜工人似乎尊重我所有现有的日志设置。他们写入 Django 应用程序所用的同一个文件,甚至在我记录错误级别消息(我有一个日志设置)时他们甚至发送电子邮件。在我的情况下,这正是我想要的。
而且我似乎根本不必为 get_task_logger(name) 而烦恼。