用哨兵处理所有异常

elm*_*ami 6 python exception scrapy sentry

我现在正在忙于抓取一个项目,我想整合哨兵,

我已经使用了 scrapy-sentry,但是它根本没有用

我也尝试使用扩展来实现它,但仅在蜘蛛的回调中发生错误时才有效(不是pipelines.py,item.py)...

from scrapy import signals

from raven import Client


class FailLogger(object):
    client = Client(settings.get('SENTRY_DSN'))

    @classmethod
    def from_crawler(cls, crawler):
        ext = cls()

        crawler.signals.connect(ext.spider_error, signal=signals.spider_error)
        return ext

    def spider_error(self, failure, response, spider):
        try:
            failure.raiseException()
        except:
            self.client.get_ident(self.client.captureException())
Run Code Online (Sandbox Code Playgroud)

我有什么可以将错误(在蜘蛛,物品,管道等中)记录到哨兵中的,就像在Django中一样?

谢谢。

小智 6

这是一篇旧文章,但我的回答可能对其他人有用。Raven被sendry-python(以sentry-sdkpip 命名)代替。使用这个新软件包,比scrapy-sentry有一个更简单,更完整的解决方案。它基于抓取日志记录功能基于stdlib日志记录模块这一事实。

您可以使用以下非常简单的scrapy扩展来捕获Spider内部和外部(包括下载程序中间件,项目中间件等)的异常和错误。

  1. extensions.pySentryLogging扩展名添加到您的scrapy项目文件中:
import sentry_sdk
from scrapy.exceptions import NotConfigured

class SentryLogging(object):
    """
    Send exceptions and errors to Sentry.
    """

    @classmethod
    def from_crawler(cls, crawler):
        sentry_dsn = crawler.settings.get('SENTRY_DSN', None)
        if sentry_dsn is None:
            raise NotConfigured
        # instantiate the extension object
        ext = cls()
        # instantiate
        sentry_sdk.init(sentry_dsn)
        # return the extension object
        return ext
Run Code Online (Sandbox Code Playgroud)
  1. 将以下几行添加到您的行中settings.py,以较低的值激活它,以尽快捕获异常和错误:
# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
EXTENSIONS = {
    'myproject.extensions.SentryLogging': -1, # Load SentryLogging extension before others
}

# Send exceptions to Sentry
# replace SENTRY_DSN by you own DSN
SENTRY_DSN = "XXXXXXXXXX"
Run Code Online (Sandbox Code Playgroud)

确保用SENTRY_DSN关联项目的Sentry DSN 替换。

现在,应该将蜘蛛内外的错误和异常发送给Sentry。如果要进一步自定义发送给Sentry的内容,则可能要sentry_sdk.init()根据其文档编辑呼叫。

  • 这创造了奇迹。应该在 Scrapy 官方文档中!:) (2认同)