的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()
呢?
可能通过台球修复,请参阅https://github.com/celery/celery/issues/1404。 –