2013-04-16 76 views
8

celery 3.x docs on logging建议设立任务记录器,像这样:我传递给芹菜的get_task_logger()函数的参数是什么?

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

我的任务是在我的应用程序myapp中的模块tasks。因此,__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()呢?

回答

2

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

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

+0

可能通过台球修复,请参阅https://github.com/celery/celery/issues/1404。 –