2013-04-18 4 views
7

Sono in esecuzione di un registro delle Scrapy in questo modo:registrazione a specifici file di log degli errori in Scrapy

from scrapy import log 
class MySpider(BaseSpider): 
    name = "myspider" 

    def __init__(self, name=None, **kwargs): 
     LOG_FILE = "logs/spider.log" 
     log.log.defaultObserver = log.log.DefaultObserver() 
     log.log.defaultObserver.start() 
     log.started = False 
     log.start(LOG_FILE, loglevel=log.INFO) 
     super(MySpider, self).__init__(name, **kwargs) 

    def parse(self,response): 
     .... 
     raise Exception("Something went wrong!") 
     log.msg('Something went wrong!', log.ERROR) 

     # Somehow write to a separate error log here. 

Poi corro il ragno in questo modo:

scrapy crawl myspider 

Questo sarebbe memorizzare tutto il registro Dati .INFO e log.ERROR in spider.log.

Se si verifica un errore, vorrei anche memorizzarli in un file di registro separato chiamato spider_errors.log. Renderebbe più semplice la ricerca di errori verificatisi piuttosto che cercare di eseguire la scansione dell'intero file spider.log (che potrebbe essere enorme).

C'è un modo per farlo?

EDIT:

Cercando con PythonLoggingObserver:

def __init__(self, name=None, **kwargs): 
     LOG_FILE = 'logs/spider.log' 
     ERR_File = 'logs/spider_error.log' 

     observer = log.log.PythonLoggingObserver() 
     observer.start() 

     log.started = False  
     log.start(LOG_FILE, loglevel=log.INFO) 
     log.start(ERR_FILE, loglevel=log.ERROR) 

ma ho ERROR: No handlers could be found for logger "twisted"

+0

Dove è 'MySpider' definito? –

+0

@StevenAlmeroth Spiacente, il codice era solo un frammento. L'ho aggiornato per essere più completo. – Bak

risposta

9

Basta lasciare logging fare il lavoro. Cercate di usare PythonLoggingObserver invece di DefaultObserver:

  • configurare due logger (uno per INFO e uno per ERROR messaggi) direttamente in Python, o tramite fileconfig, o tramite dictconfig (vedi docs)
  • avviarlo in ragno di __init__:

    def __init__(self, name=None, **kwargs): 
        # TODO: configure logging: e.g. logging.config.fileConfig("logging.conf") 
        observer = log.PythonLoggingObserver() 
        observer.start() 
    

Fammi sapere se hai bisogno di aiuto con la configurazione logger S.

EDIT:

Un'altra opzione è quella di iniziare a due osservatori di log file in __init__.py:

from scrapy.log import ScrapyFileLogObserver 
from scrapy import log 


class MySpider(BaseSpider): 
    name = "myspider" 

    def __init__(self, name=None, **kwargs): 
     ScrapyFileLogObserver(open("spider.log", 'w'), level=logging.INFO).start() 
     ScrapyFileLogObserver(open("spider_error.log", 'w'), level=logging.ERROR).start() 

     super(MySpider, self).__init__(name, **kwargs) 

    ... 
+0

Continuo a ricevere l'errore 'ERRORE: non è stato possibile trovare gestori per il programma di registrazione" twistato "'. – Bak

+0

Per favore, mostra la configurazione di registrazione. Il problema è lì. – alecxe

+0

Ho aggiornato con le mie modifiche nel post originale. – Bak