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

Hen*_*ger 8 python celery

关于日志记录芹菜3.x文档建议设置任务记录器,如下所示:

from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
Run Code Online (Sandbox Code Playgroud)

当我这样做时,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
Run Code Online (Sandbox Code Playgroud)

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

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

Hen*_*ger 2

截至2014年10月5日,情况已不再如此。现在通过__name__似乎工作正常(当前实现)。

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