django-sentry - приложение, которое отлавливает и сохраняет ошибки в базу данных.

На get.2leep.com я использую celery для выполнения некоторых задач в фоне. По умолчанию, если какой-нибудь таск из celery возвращает ошибку, она вываливается в консоль, это не очень удобно. Есть возможность сохранять результаты всех тасков в базу, там ошибки тоже будут видны, но будет проще, если всё будет находиться в одном месте, тем более, что у sentry приятный интерфейс для их просмотра.

Для решения этой проблемы можно использовать такой вот код, который нужно добавить в tasks.py, чтобы celery сохранял все ошибки в sentry

from sentry.client.handlers import SentryHandler
from celery.signals import task_failure
import logging

logger = logging.getLogger('task')
logger.addHandler(SentryHandler())
def process_failure_signal(exception, traceback, sender, task_id,
                           signal, args, kwargs, einfo, **kw):
    exc_info = (type(exception), exception, traceback)
    logger.error(
            'Celery job exception: %s(%s)' % (exception.__class__.__name__, exception),
            exc_info=exc_info,
            extra={
                'data': {
                        'task_id': task_id,
                        'sender': sender,
                        'args': args,
                        'kwargs': kwargs,
                    }
                })
task_failure.connect(process_failure_signal)