2

我有兴趣访问在执行的 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

我已经阅读了对3.0的 Celery 日志记录改进、Celery 日志记录文档utils.log源代码,但似乎找不到任何适合我需要的内容。甚至可以访问挂起任务的日志消息吗?我可以轻松地返回一个StringIO捕获消息的实例以及我的任务的正常返回值,但我有兴趣在完成之前访问任务的日志。

有小费吗?

4

1 回答 1

0

将 a 添加logging.Filter到返回的处理程序True(以便正常处理日志记录事件)。过滤器将以LogRecord实例的形式查看传递给处理程序的所有事件(除非被处理程序的级别过滤掉)。

于 2013-08-09T17:31:40.427 回答