我将什么参数传递给芹菜的get_task_logger()函数?

时间:2013-04-16 17:39:22

标签: python celery

celery 3.x docs on logging建议设置任务记录器,如下所示:

from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)

当我这样做时,CELERYD_TASK_LOG_FORMAT会被忽略,日志语句会使用CELERYD_LOG_FORMAT,而我无法使用%(task_name)s%(task_id)s

我的任务位于我的应用tasks中的模块myapp中。因此,__name__myapp.tasks

我认为问题是celery/utils/log.py中的这些行:

def get_task_logger(name):
    logger = get_logger(name)
    if logger.parent is logging.root:
        logger.parent = task_logger
    return logger

因此无论出于何种原因,传递给get_task_logger()的模块必须是第一级模块,否则不会附加任务记录器。没有评论解释为什么会出现这种情况(我想不出有什么理由为什么你会添加这个限制,真的)。 __name__不起作用,因为它引用了第二级模块。

我犯了错误还是文档错了?如果是这样,我应该将什么传递给get_task_logger()

1 个答案:

答案 0 :(得分:2)

截至2014-10-05,情况已不再如此。现在传递__name__似乎工作正常(current implementation)。

请记住,您的任务记录器仍将被强制继承celery.task。默认情况下,其父记录器celery不会传播到根记录器,因此您可能希望在日志记录配置中为celery.task定义记录器。