【发布时间】:2013-08-09 15:05:52
【问题描述】:
我有兴趣访问在执行的 Celery 任务期间记录的所有日志消息。
通过documentation,我可以为所有任务创建一个记录器,以便将任务的 ID 作为日志的一部分自动报告:
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
@celery.task
def add(x, y):
logger.info('Adding %s + %s', x, y)
return x + y
这会产生这样的日志消息:
[2013-08-09 10:05:02,381: INFO/MainProcess] project.tasks.add[e56cd982-4c20-2328-af55-9cf4d63623df]: Adding 2 + 2
我可以根据报告的任务 ID 从 logger 中提取相关消息,但这似乎非常低效和不优雅。
此外,我希望能够在task.ready() 返回True 之前查看日志消息(就像task.state 将在完成之前提供PENDING)。
我已经阅读了Celery logging improvements to 3.0、Celery logging documentation 和utils.log source code,但似乎找不到适合我需要的任何内容。甚至可以访问挂起任务的日志消息吗?我可以轻松地返回一个 StringIO 实例捕获消息以及我的任务的正常返回值,但我有兴趣访问任务的日志在完成之前。
有什么建议吗?
【问题讨论】: