Scrapy在电子邮件上发送错误

时间:2016-02-12 12:34:43

标签: python email logging smtp scrapy

美好的一天。有关于伐木和scrapy的问题。我希望发送有错误的电子邮件,如果它们在Scrapy工作时发生。我已添加电子邮件处理程序并将其连接到spider.logger:

def __init__(self, test=False, *args, **kwargs):
    eh = SMTPHandler('localhost', fromaddr='crawler@example.com',
                     toaddrs=LOG_EMAIL_LIST, subject='Error report')
    eh.setLevel(logging.ERROR)
    self.logger.logger.addHandler(eh)
    super(BaseGenericSpider, self).__init__(*args, **kwargs)

如果我手动添加错误(例如self.logger.error('Test')),我会收到有关我的电子邮件的通知。但是当我用scrapy错误测试它时(例如我在爬虫的代码中用语法错误来测试它),我看到Scrapy记录了这个错误,但我没有我的电子邮件收到任何内容你能帮我吗?提前谢谢。

UPD。 好吧,我想我发现了一个问题,但我现在还不知道如何解决它。当我向self.logger添加处理程序时,我有这样的消息:

2016-02-12 14:23:19 [sslv] ERROR: Test error case

但scrapy错误有这种格式:

2016-02-12 14:44:28 [scrapy] ERROR: Error while obtaining start requests

因此,正如您所见,scrapy logger还有其他名称。实际上,我们还有twisted记录器和许多其他记录器。如何为所有这些记录器设置电子邮件处理程序?

1 个答案:

答案 0 :(得分:1)

Alreasy解决了。我在__init__.py文件中添加了处理程序并将其连接到根记录器。

import logging
from logging.handlers import SMTPHandler

from settings import LOG_EMAIL_LIST

eh = SMTPHandler('localhost', fromaddr='crawler@example.com',
                         toaddrs=LOG_EMAIL_LIST, subject='Error report')
eh.setLevel(logging.ERROR)
logging.getLogger().addHandler(eh)