首页 > 解决方案 > 使用没有 raven 的新 sentry_sdk 为 Django 配置 Sentry 处理程序

问题描述

用于 django 的新 sentry_sdk 提供了非常简短的安装(通过标记为弃用的 raven 进行集成)。

import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

sentry_sdk.init(
  dsn="https://<key>@sentry.io/<project>",
  integrations=[DjangoIntegration()]
)

以前,人们会像这样使用 raven 作为处理程序类来配置哨兵。

'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'},
    },
...
...
'loggers':{
       'project.custom':{
             'level': 'DEBUG',
             'handlers': ['sentry', 'console', ,]
       }

查看此处定义的更多内容

挑战在于 raven 不接受 SENTRY_DSN 的新格式。在格式https://<key>@domain.com/project/旧格式沿线https://<key>:<secret>@domain.com/project。乌鸦会扔InvalidDSN with the old format。旧的 DSN 密钥被标记为弃用。

该文档对如何定义处理程序非常沉默。显然已弃用的 raven 对新的密钥格式不满意。我可以依赖旧的 DSN deprecated format,但会感谢有关如何使用新格式配置处理程序的建议。

标签: djangosentryraven

解决方案


我已经进行了一些阅读和练习。新版本不以任何方式依赖 raven。所以你必须删除所有对raven. insettings.py以及对 raven 客户端的任何引用。

无需担心 sentry_sdk 的处理程序。仅声明控制台的处理程序并将该处理程序附加到根据需要定义的每个其他记录器就足够了。

'handlers':{
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'verbose'
    }
    # No need to define a sentry handler, defined by the integration.
}
'loggers':{
   'project.custom': {
       'level': 'DEBUG',
       'handlers': ['console', ], # You dont have to add sentry handler here
   }
}

另外注意logger.exception将被忽略,您将不得不使用 capture_exception from sentry_sdk or capture_message from sentry_sdk

显然,由于多种原因,事件可能未登录到哨兵,但是 logger.exception 应该始终有效


推荐阅读