如何在 Scrapy 中通过电子邮件发送错误日志
How to send error logs on email in 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 记录了那个错误,但我没有在我的电子邮件中收到任何东西。你能帮我吗?提前谢谢你。
更新。
好的,我想我发现了一个问题,但我现在不知道如何解决。当我向 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
记录器和许多其他的。如何为所有记录器设置电子邮件处理程序?
已经解决了。我在 __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)
我想发送有错误的邮件,如果它们在 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 记录了那个错误,但我没有在我的电子邮件中收到任何东西。你能帮我吗?提前谢谢你。
更新。
好的,我想我发现了一个问题,但我现在不知道如何解决。当我向 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
记录器和许多其他的。如何为所有记录器设置电子邮件处理程序?
已经解决了。我在 __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)