如何访问每个芹菜任务的日志消息

时间:2013-08-09 15:05:53

标签: python logging celery

我有兴趣访问在执行的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.0Celery logging documentationutils.log source code,但似乎找不到符合我需求的内容。甚至可以访问待处理任务的日志消息吗?我可以轻松地返回一个StringIO实例捕获消息以及我的任务的正常返回值,但我有兴趣在完成之前访问任务的日志

任何提示?

1 个答案:

答案 0 :(得分:0)

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