如何禁用芹菜任务结果记录?

Posted

技术标签:

【中文标题】如何禁用芹菜任务结果记录?【英文标题】:How to disable celery task result logging? 【发布时间】:2020-04-03 18:18:45 【问题描述】:

我有工作的 Celery 3.1 应用程序,它记录了一些敏感信息。理想情况下,我会拥有相同的日志,但没有 result 部分。

目前看起来是这样的:

worker_1 | [2019-12-10 13:46:40,052: INFO/MainProcess] Task xxxxx succeeded in 13.19569299298746s: yyyyyyy

我想要:

worker_1 | [2019-12-10 13:46:40,052: INFO/MainProcess] Task xxxxx succeeded in 13.19569299298746s

怎么做?

编辑: 这似乎可以完成这项工作:https://docs.celeryproject.org/en/3.1/reference/celery.worker.job.html#celery.worker.job.Request.success_msg 但我不知道如何实际使用它。

【问题讨论】:

【参考方案1】:

以防它在不久的将来对任何人有用,我在 Celery 4.4 中发现 Request 类中的 success_msg 有 been moved to the application tracer。

幸运的是,这似乎可以在您的 Django 应用程序的celery.py 中轻松覆盖,如下所示:

from celery.app import trace

trace.LOG_SUCCESS = """\
Task %(name)s[%(id)s] succeeded in %(runtime)ss\
"""

当然,您可以将其更改为您喜欢的任何内容,这只是删除了返回值部分。 Full context here.

【讨论】:

【参考方案2】:

您需要覆盖正在发送的成功消息,从那里删除 return_value 格式。 为此,您需要重写 Request 类,如 here 所述。

您还可以覆盖 here 中提到的日志记录配置。

【讨论】:

【参考方案3】:

worker_1 | [2019-12-10 13:46:40,052: INFO/MainProcess] 任务 xxxxx 在 13.19569299298746s 成功:yyyyyyy

yyyyyyy 是你的函数返回的结果,删除它只是返回你想要的。 在您的情况下,只有 return 有效

【讨论】:

以上是关于如何禁用芹菜任务结果记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中等待芹菜任务的结果

如何记录 Django 芹菜任务中发生的异常

如何在任务中获取芹菜结果模型(使用 django-celery-results)

我应该如何在芹菜中实现任务集的回调

从未知任务中检索芹菜中“task_id”的结果

芹菜 - 无法获取任务结果