如何将Django项目的例外发送给哨兵

时间:2018-09-12 06:13:23

标签: python django sentry raven

Sentry Django guide之后,我已经设置并部署了项目。

因此,我使用RAVEN_CONFIG值和SENTRY_DSN值配置release,并在raven.contrib.django.raven_compat中包含INSTALLED_APPS

我已经确认,使用此配置,以下命令将正确地在哨兵中生成一条消息。

python manage.py raven test

但是,我创建了以下django视图以引发异常,作为确认哨兵正在工作的另一种方法,当我单击此视图时,得到了500的响应,但哨兵中没有任何显示。

app1 / views.py

def error(request):
    x = 1/0  # error for sentry testing
  

我期望的是任何异常(包括500个错误),   在django中发生的事件将被发送到哨兵,而无需使用   记录。

我对乌鸦哨兵配置的理解是否错误? 还是我需要配置其他东西?

我正在使用django的LOGGING设置,但此刻我不在乎是否将这些消息“错误”发送给哨兵。我目前的主要目标是捕获并发送哨兵中发生的任何异常。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '{asctime} [{levelname:5}] ({name}) {funcName}: {message}',
            'style': '{',
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'standard',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': DJANGO_CORE_LOG_LEVEL,  # Change to DEBUG to see db queries
        },
        'app1': {
            'handlers': ['console'],
            'level': DJANGO_LOG_LEVEL,
            'propagate': True,
        },
        'app2': {
            'handlers': ['console'],
            'level': DJANGO_LOG_LEVEL,
            'propagate': True,
        }
    },
}

更新

在本地使用 runserver 时,我设法获取了app1.views.error视图以向哨兵报告错误,但是在更新配置并进行部署后,部署后仍然无法使用。 (manage raven test确实如此

3 个答案:

答案 0 :(得分:2)

来自岗哨文档

apt-get install

}

链接到文档:https://docs.sentry.io/clients/python/integrations/django/

编辑:从评论中

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'root': {
    'level': 'WARNING',
    'handlers': ['sentry'],
},
'formatters': {
    'verbose': {
        'format': '%(levelname)s  %(asctime)s  %(module)s '
                  '%(process)d  %(thread)d  %(message)s'
    },
},
'handlers': {
    'sentry': {
        'level': 'ERROR', # To capture more than ERROR, change to WARNING, INFO, etc.
        'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        'tags': {'custom-tag': 'x'},
    },
    '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,
    },
},

如果您不想手动执行此操作,并且希望在项目中任何地方触发异常块时都进行哨兵日志记录,请使用上面的基于日志记录的解决方案。

答案 1 :(得分:0)

正如@Mehran在LOGGING中配置settings.py之后说的那样,您将可以使用日志记录。假设您在example中的loggers的配置如下;

'loggers': {        
    'example': {
        'handlers': ['console', 'sentry'],
        'level': 'DEBUG',
        'propagate': False
    }
}

然后;

import logging

logger = logging.getLogger("example")

def test():
    try:
       # some staff
    except Exception as error:
       logger.error("Custom Error Message %s" %error)

logger也有warninfo等。

答案 2 :(得分:0)

也可以不使用任何Sentry库而是直接使用纯requests直接发布到Sentry DSN。如果您运行的Python或Django版本与Sentry的最新DSN不兼容,这将很有用。

我为此发布了代码-包括示例测试-here