我正在研究一个带scrapy的项目一段时间了,我想整合哨兵,
我使用了scrapy-sentry,但它根本不起作用
我也尝试使用Extensions实现它,但只有在spider的回调中发生错误(而不是pipelines.py,items.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())
有没有我可以将错误(在蜘蛛,物品,管道中......)记录到哨兵,就像在Django中一样?
谢谢。
答案 0 :(得分:3)
这是一篇旧文章,但我的回答可能对其他人有用。 Raven被sendry-python(在pip中命名为sentry-sdk
)取代。使用这个新软件包,比scrapy-sentry有一个更简单,更完整的解决方案。这是基于抓取日志记录功能基于stdlib日志记录模块的事实。
您可以使用以下非常简单的scrapy扩展来捕获Spider内部和外部(包括下载程序中间件,项目中间件等)的异常和错误。
extensions.py
扩展名添加到您的scrapy项目的SentryLogging
文件中: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
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"
请确保用相关项目的Sentry DSN替换SENTRY_DSN
。
蜘蛛内部和外部的错误和异常现在应该发送给Sentry。如果要进一步自定义发送给Sentry的内容,则可能需要根据its documentation编辑对sentry_sdk.init()
的呼叫。