2013-04-16 79 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。 –