我有兴趣访问在执行的Celery任务的生命周期中记录的所有日志消息。
从文档中,我可以为所有任务创建一个记录器,这样任务的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对3.0的日志记录改进、Celery日志记录文档和utils.log
源代码,但似乎找不到任何适合我需要的东西。是否可以访问挂起任务的日志消息?我可以很容易地返回StringIO
实例捕获消息以及任务的正常返回值,但我有兴趣在完成之前访问任务的日志。
有什么建议吗?
将logging.Filter
添加到处理程序中,该处理程序将返回True
(因此日志事件将正常处理)。过滤器将以LogRecord
实例的形式查看传递给处理程序的所有事件(除非被处理程序级别过滤掉)。