【问题标题】:How to access log messages for each celery task如何访问每个 celery 任务的日志消息
【发布时间】: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.0Celery logging documentationutils.log source code,但似乎找不到适合我需要的任何内容。甚至可以访问挂起任务的日志消息吗?我可以轻松地返回一个 StringIO 实例捕获消息以及我的任务的正常返回值,但我有兴趣访问任务的日志完成之前。

有什么建议吗?

【问题讨论】:

    标签: python logging celery


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 2011-09-05
      • 2013-09-30
      • 1970-01-01
      • 2011-05-22
      • 2020-08-04
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多