首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Sentry发送Django-RQ异常

向Sentry发送Django-RQ异常
EN

Stack Overflow用户
提问于 2015-12-12 10:03:59
回答 1查看 722关注 0票数 2

我在Heroku应用程序中使用Django-RQ来处理后台任务。

当在我的后台任务中发生错误时,它不会被发送到Sentry。

我在settings.py中的日志设置如下:

代码语言:javascript
复制
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'root': {
        'level': 'WARNING',
        'handlers': ['sentry'],
    },
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s '
                      '%(process)d %(thread)d %(message)s'
        },
        "rq_console": {
            "format": "%(asctime)s %(message)s",
            "datefmt": "%H:%M:%S",
        },
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        "rq_console": {
            "level": "DEBUG",
            "class": "rq.utils.ColorizingStreamHandler",
            "formatter": "rq_console",
            "exclude": ["%(asctime)s"],
        },
        'sentry': {
            'level': 'ERROR',
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler'
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
        'raven': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
        'sentry.errors': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
        "rq.worker": {
            "handlers": ["rq_console", "sentry"],
            "level": "DEBUG"
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    },
}

感谢任何关于我做错了什么的建议。

EN

回答 1

Stack Overflow用户

发布于 2016-07-21 02:45:37

您将需要开发一个自定义工作程序,并使用python-rq注册哨兵处理程序。

我假设您使用rq.Worker作为worker类(django-rq上的默认类)。

代码语言:javascript
复制
import rq
from raven import Client
from raven.transport import HTTPTransport
from rq.contrib.sentry import register_sentry

class SentryAwareWorker(rq.Worker):

    def __init__(self, *args, **kwargs):
        super(SentryAwareWorker, self).__init__(*args, **kwargs)
        dsn = settings.RAVEN_CONFIG['dsn']
        client = Client(dsn, transport=HTTPTransport)
        register_sentry(client, self)

我提供了一个获取sentry dsn和初始化sentry客户端的选项,但您可以随心所欲地执行此操作。最重要的部分是register_sentry(client, self)

然后使用以下命令运行您的worker:

代码语言:javascript
复制
python manage.py rqworker queue_1 queue_2 queue_n --worker-class path.to.SentryAwareWorker
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34235404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档