我有兴趣访问在执行的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
实例捕获消息以及我的任务的正常返回值,但我有兴趣在完成之前访问任务的日志。
任何提示?
答案 0 :(得分:0)
向处理程序添加logging.Filter
,返回True
(以便正常处理日志记录事件)。过滤器将以LogRecord
实例的形式查看传递给处理程序的所有事件(除非由处理程序的级别过滤掉)。