2016-02-12 142 views
0

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

def __init__(self, test=False, *args, **kwargs): 
    eh = SMTPHandler('localhost', fromaddr='[email protected]', 
        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记录仪有其他名称。其实,我们也有twisted记录器等等。如何为所有记录器设置电子邮件处理程序?

回答

0

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

import logging 
from logging.handlers import SMTPHandler 

from settings import LOG_EMAIL_LIST 

eh = SMTPHandler('localhost', fromaddr='[email protected]', 
         toaddrs=LOG_EMAIL_LIST, subject='Error report') 
eh.setLevel(logging.ERROR) 
logging.getLogger().addHandler(eh)