使用没有乌鸦的新 sentry_sdk 为 Django 配置哨兵处理程序

Configuring Sentry handler for Django with new sentry_sdk without raven

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

import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

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

以前,人们会像这样用 raven 配置 sentry 作为处理程序 class。

'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', ,]
       }

查看更多as defined here

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

文档对如何定义处理程序只字未提。显然已被弃用的乌鸦对新的密钥格式不满意。 我可以依赖旧的 DSN deprecated format,但会感谢有关如何使用新格式配置处理程序的建议。

我进行了一些阅读和练习。新版本不以任何方式依赖于 raven。所以你必须删除所有对 raven 的引用。在 settings.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

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