Celery / Django - 如何将现有函数转换为任务并处理现有日志记录

时间:2016-02-24 13:35:49

标签: python django celery django-celery

这是我的情景。我的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)

但是,当从后台任务调用时,如何使被调用函数中的日志记录都正常工作?

1 个答案:

答案 0 :(得分:0)

经过一段时间的工具并尝试不同的东西后,它似乎就像设置此选项一样简单:

CELERYD_HIJACK_ROOT_LOGGER = False

一旦我这样做,芹菜工人似乎尊重我现有的所有日志设置。他们写入Django应用程序所做的同一个文件,他们甚至在我记录错误级别消息时发送电子邮件(我有一个日志设置)在我的情况下,这正是我想要的。

我似乎根本没有打扰get_task_logger(名称)。