2016-02-12 5 views
0

Добрый день. У вас есть вопрос о лесозаготовках и рубках. Я хочу отправить сообщение с ошибками, если они происходят во время работы Scrapy. Я добавить обработчик электронной почты и подключить его к spider.logger:Scrapy send error on email

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 logger и многие другие. Как настроить обработчик электронной почты для всех этих журналов?

ответ

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)