首页 > 解决方案 > 更少的 Celery 任务日志记录

问题描述

我们使用 Celery 来管理 Python Django 应用程序中的任务。
我们还使用 Djangostructlog来记录 Celery 打印的日志消息。
我们通过 Logstash 将这些消息摄取到 ElasticSearch,并注意到我们收到的绝大多数消息是以下 2 条:

收到的任务:%s

任务 %(name)s[%(id)s] 在 %(runtime)ss 中成功:%(return_value)s

Celery 使用INFO日志记录级别转储它们。
有没有办法将这些消息更改为调试级别?
这样我们仍然可以运行 celery-l INFO并查看其他INFO消息,但不是这些?

更新

对于第二个日志消息。

快速阅读后:

如果没有太多关于 Celery、Django 和 structlog 的知识,这样的东西会起作用吗?

LOGGING = {
...
'loggers': {
        'celery.app.trace': {
          'handlers': ['null'],
          'propagate': False,
         }
...
}

标签: elasticsearchceleryelastic-stackdjango-celery

解决方案


我只能忽略这两条消息:

初始化.py

import celery
from unittest import mock

app = celery.Celery()


from celery.app import trace
old_info = trace.info
trace.info = mock.Mock()


class MyTask(celery.Task):
    Strategy = '61242484.strategy:my_default'


@app.task(base=MyTask)
def test():
    print("123")


test.apply_async()

策略.py

from unittest import mock
from celery.worker.strategy import default


def my_default(*args, **kwargs):
    kwargs['info'] = mock.Mock()
    return default(*args, **kwargs)

推荐阅读