【问题标题】:Configuring Sentry handler for Django with new sentry_sdk without raven使用没有 raven 的新 sentry_sdk 为 Django 配置 Sentry 处理程序
【发布时间】:2019-12-08 00:56:16
【问题描述】:

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

挑战在于 raven 不接受 SENTRY_DSN 的新格式。格式为https://&lt;key&gt;@domain.com/project/ 旧格式类似于https://&lt;key&gt;:&lt;secret&gt;@domain.com/project。 乌鸦会抛出InvalidDSN with the old format。旧的 DSN 密钥已标记为弃用。

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

【问题讨论】:

    标签: django sentry raven


    【解决方案1】:

    我已经进行了一些阅读和练习。新版本不以任何方式依赖 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

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

    【讨论】:

    • >logger.exception 将被忽略 这不应该是真的。你在哪里看到的?
    • @Markus Unterwaditzer,不应该是这样。据我所见, logger.exception 没有将东西发送到哨兵。它可能是我的设置中的其他一些设置,但是对于我看到的乌鸦处理程序,报告没有通过 logger.exception 进入哨兵
    • 是的,好的,但是新的 SDK 呢?
    • 正如我在回答@MarkusUnterwaditzer 中所说,如果我想将日志发送到哨兵。我不得不使用capture_exception 而不是logger.exception。那就是如果我用新的方式配置它without raven
    • 请在此处将其报告为错误:github.com/getsentry/sentry-python 这不是预期的行为
    猜你喜欢
    • 2014-02-02
    • 2014-10-05
    • 2017-03-13
    • 2018-03-18
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多