使用没有raven的新sentry_sdk为Django配置Sentry处理程序

时间:2019-07-30 15:14:47

标签: django sentry raven

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

查看更多as defined here

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

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

1 个答案:

答案 0 :(得分:0)

我已经阅读和练习了。新版本完全不依赖乌鸦。因此,您必须删除对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

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