芹菜任务使用特定的哨兵记录器无法正常工作

时间:2017-08-13 18:43:10

标签: python django logging celery sentry

关于芹菜整合和使用特定记录器的哨兵示例之后无法正常工作,因为哨兵正在接收任何错误或任何记录器。 无论如何要控制记录器发送到哨兵?

import logging
import celery
import raven
from raven.contrib.celery import register_signal, register_logger_signal
sentry_logger = logging.getLogger("logger_for_sentry")

class Celery(celery.Celery):

    def on_configure(self):
        client = raven.Client('https://<key>:<secret>@sentry.io/<project>')

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client, logger=sentry_logger)

        # hook into the Celery error handler
        register_signal(client)

app = Celery(__name__)
app.config_from_object('django.conf:settings')

这些是我的日志记录设置,当我在网上跟踪my_logger1时,它按预期工作,而不是发送到哨兵,但是在芹菜中它被发送

LOGGING = {
     ...
    'loggers': {
        'sentry_logger': {
            'handlers': ['console', 'sentry'],
            'level': 'INFO',
            'propagate': True,
        },
        'my_logger1': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True
        },
        'sentry': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        },
        'sentry.errors': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        },    
    }
}

1 个答案:

答案 0 :(得分:0)

在您的django日志记录设置中设置celery记录器,如下所示:

LOGGING = {
    # ...
    'loggers': {
        # ...
        'celery': {
            'level': 'WARNING',
            'propagate': False,
            'handlers': ['console'],  # use only console for celery
        },
    }
}

celery.py

import os
from celery import Celery

# set your real settings module instead `apps.settings`
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'apps.settings')  

app = Celery('ag')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()